Enter the directory of the maca folder on your drive and the name of the tissue you want to analyze.

tissue_of_interest = "Marrow"

Load the requisite packages and some additional helper functions.

library(here)
library(useful)
library(Seurat)
library(dplyr)
library(Matrix)
save_dir = here('00_data_ingest', 'tissue_robj')
# read the metadata to get the plates we want
plate_metadata_filename = here('00_data_ingest', 'facs_raw_data', 'metadata_FACS.csv')
plate_metadata <- read.csv(plate_metadata_filename, sep=",", header = TRUE)
colnames(plate_metadata)[1] <- "plate.barcode"
plate_metadata

Subset the metadata on the tissue.

tissue_plates = filter(plate_metadata, tissue == tissue_of_interest)[,c('plate.barcode','tissue','subtissue','mouse.sex')]
tissue_plates

Load the read count data.

#Load the gene names and set the metadata columns by opening the first file
filename = here('00_data_ingest', 'facs_raw_data', 'FACS', paste0(tissue_of_interest, '-counts.csv'))
raw.data = read.csv(filename, sep=",", row.names=1)
# raw.data = data.frame(row.names = rownames(raw.data))
corner(raw.data)

Make a vector of plate barcodes for each cell

plate.barcodes = lapply(colnames(raw.data), function(x) strsplit(strsplit(x, "_")[[1]][1], '.', fixed=TRUE)[[1]][2])
head(plate.barcodes)
[[1]]
[1] "D042044"

[[2]]
[1] "D042044"

[[3]]
[1] "D042044"

[[4]]
[1] "D042044"

[[5]]
[1] "D042044"

[[6]]
[1] "D042044"

Use only the metadata rows corresponding to Bladder plates. Make a plate barcode dataframe to “expand” the per-plate metadata to be per-cell.

barcode.df = t.data.frame(as.data.frame(plate.barcodes))
rownames(barcode.df) = colnames(raw.data)
colnames(barcode.df) = c('plate.barcode')
head(barcode.df)
                      plate.barcode
A22.D042044.3_9_M.1.1 "D042044"    
C5.D042044.3_9_M.1.1  "D042044"    
D10.D042044.3_9_M.1.1 "D042044"    
E13.D042044.3_9_M.1.1 "D042044"    
F19.D042044.3_9_M.1.1 "D042044"    
H2.D042044.3_9_M.1.1  "D042044"    
rnames = row.names(barcode.df)
meta.data <- merge(barcode.df, plate_metadata, by='plate.barcode', sort = F)
row.names(meta.data) <- rnames
# Sort cells by plate barcode because that's how the data was originally
meta.data = meta.data[order(meta.data$plate.barcode), ]
corner(meta.data)
raw.data = raw.data[, rownames(meta.data)]
corner(raw.data)

Process the raw data and load it into the Seurat object.

# Find ERCC's, compute the percent ERCC, and drop them from the raw data.
erccs <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = TRUE)
percent.ercc <- Matrix::colSums(raw.data[erccs, ])/Matrix::colSums(raw.data)
ercc.index <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = FALSE)
raw.data <- raw.data[-ercc.index,]
# Create the Seurat object with all the data
tiss <- CreateSeuratObject(raw.data = raw.data, project = tissue_of_interest, 
                    min.cells = 5, min.genes = 5)
tiss <- AddMetaData(object = tiss, meta.data)
tiss <- AddMetaData(object = tiss, percent.ercc, col.name = "percent.ercc")
# Change default name for sums of counts from nUMI to nReads
colnames(tiss@meta.data)[colnames(tiss@meta.data) == 'nUMI'] <- 'nReads'
# Create metadata columns for annotations and subannotations
tiss@meta.data[,'annotation'] <- NA
tiss@meta.data[,'subannotation'] <- NA

Calculate percent ribosomal genes.

ribo.genes <- grep(pattern = "^Rp[sl][[:digit:]]", x = rownames(x = tiss@data), value = TRUE)
percent.ribo <- Matrix::colSums(tiss@raw.data[ribo.genes, ])/Matrix::colSums(tiss@raw.data)
tiss <- AddMetaData(object = tiss, metadata = percent.ribo, col.name = "percent.ribo")

A sanity check: genes per cell vs reads per cell.

GenePlot(object = tiss, gene1 = "nReads", gene2 = "nGene", use.raw=T)

Filter out cells with few reads and few genes.

tiss <- FilterCells(object = tiss, subset.names = c("nGene", "nReads"), 
    low.thresholds = c(500, 50000), high.thresholds = c(25000, 2000000))

Normalize the data, then regress out correlation with total reads

tiss <- NormalizeData(object = tiss)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
tiss <- ScaleData(object = tiss, vars.to.regress = c("nReads", "percent.ribo","Rn45s"))
[1] "Regressing out nReads"       "Regressing out percent.ribo" "Regressing out Rn45s"       

  |                                                                                                                              
  |                                                                                                                        |   0%
  |                                                                                                                              
  |=                                                                                                                       |   1%
  |                                                                                                                              
  |==                                                                                                                      |   2%
  |                                                                                                                              
  |===                                                                                                                     |   2%
  |                                                                                                                              
  |===                                                                                                                     |   3%
  |                                                                                                                              
  |====                                                                                                                    |   3%
  |                                                                                                                              
  |=====                                                                                                                   |   4%
  |                                                                                                                              
  |=====                                                                                                                   |   5%
  |                                                                                                                              
  |======                                                                                                                  |   5%
  |                                                                                                                              
  |=======                                                                                                                 |   6%
  |                                                                                                                              
  |========                                                                                                                |   6%
  |                                                                                                                              
  |========                                                                                                                |   7%
  |                                                                                                                              
  |=========                                                                                                               |   7%
  |                                                                                                                              
  |==========                                                                                                              |   8%
  |                                                                                                                              
  |==========                                                                                                              |   9%
  |                                                                                                                              
  |===========                                                                                                             |   9%
  |                                                                                                                              
  |============                                                                                                            |  10%
  |                                                                                                                              
  |=============                                                                                                           |  11%
  |                                                                                                                              
  |==============                                                                                                          |  11%
  |                                                                                                                              
  |==============                                                                                                          |  12%
  |                                                                                                                              
  |===============                                                                                                         |  13%
  |                                                                                                                              
  |================                                                                                                        |  13%
  |                                                                                                                              
  |================                                                                                                        |  14%
  |                                                                                                                              
  |=================                                                                                                       |  14%
  |                                                                                                                              
  |==================                                                                                                      |  15%
  |                                                                                                                              
  |===================                                                                                                     |  15%
  |                                                                                                                              
  |===================                                                                                                     |  16%
  |                                                                                                                              
  |====================                                                                                                    |  17%
  |                                                                                                                              
  |=====================                                                                                                   |  17%
  |                                                                                                                              
  |=====================                                                                                                   |  18%
  |                                                                                                                              
  |======================                                                                                                  |  18%
  |                                                                                                                              
  |=======================                                                                                                 |  19%
  |                                                                                                                              
  |========================                                                                                                |  20%
  |                                                                                                                              
  |=========================                                                                                               |  21%
  |                                                                                                                              
  |==========================                                                                                              |  22%
  |                                                                                                                              
  |===========================                                                                                             |  22%
  |                                                                                                                              
  |===========================                                                                                             |  23%
  |                                                                                                                              
  |============================                                                                                            |  23%
  |                                                                                                                              
  |=============================                                                                                           |  24%
  |                                                                                                                              
  |=============================                                                                                           |  25%
  |                                                                                                                              
  |==============================                                                                                          |  25%
  |                                                                                                                              
  |===============================                                                                                         |  26%
  |                                                                                                                              
  |================================                                                                                        |  26%
  |                                                                                                                              
  |================================                                                                                        |  27%
  |                                                                                                                              
  |=================================                                                                                       |  27%
  |                                                                                                                              
  |==================================                                                                                      |  28%
  |                                                                                                                              
  |==================================                                                                                      |  29%
  |                                                                                                                              
  |===================================                                                                                     |  29%
  |                                                                                                                              
  |====================================                                                                                    |  30%
  |                                                                                                                              
  |=====================================                                                                                   |  31%
  |                                                                                                                              
  |======================================                                                                                  |  31%
  |                                                                                                                              
  |======================================                                                                                  |  32%
  |                                                                                                                              
  |=======================================                                                                                 |  33%
  |                                                                                                                              
  |========================================                                                                                |  33%
  |                                                                                                                              
  |========================================                                                                                |  34%
  |                                                                                                                              
  |=========================================                                                                               |  34%
  |                                                                                                                              
  |==========================================                                                                              |  35%
  |                                                                                                                              
  |===========================================                                                                             |  35%
  |                                                                                                                              
  |===========================================                                                                             |  36%
  |                                                                                                                              
  |============================================                                                                            |  37%
  |                                                                                                                              
  |=============================================                                                                           |  37%
  |                                                                                                                              
  |=============================================                                                                           |  38%
  |                                                                                                                              
  |==============================================                                                                          |  38%
  |                                                                                                                              
  |===============================================                                                                         |  39%
  |                                                                                                                              
  |================================================                                                                        |  40%
  |                                                                                                                              
  |=================================================                                                                       |  41%
  |                                                                                                                              
  |==================================================                                                                      |  42%
  |                                                                                                                              
  |===================================================                                                                     |  42%
  |                                                                                                                              
  |===================================================                                                                     |  43%
  |                                                                                                                              
  |====================================================                                                                    |  43%
  |                                                                                                                              
  |=====================================================                                                                   |  44%
  |                                                                                                                              
  |=====================================================                                                                   |  45%
  |                                                                                                                              
  |======================================================                                                                  |  45%
  |                                                                                                                              
  |=======================================================                                                                 |  46%
  |                                                                                                                              
  |========================================================                                                                |  46%
  |                                                                                                                              
  |========================================================                                                                |  47%
  |                                                                                                                              
  |=========================================================                                                               |  47%
  |                                                                                                                              
  |==========================================================                                                              |  48%
  |                                                                                                                              
  |==========================================================                                                              |  49%
  |                                                                                                                              
  |===========================================================                                                             |  49%
  |                                                                                                                              
  |============================================================                                                            |  50%
  |                                                                                                                              
  |=============================================================                                                           |  51%
  |                                                                                                                              
  |==============================================================                                                          |  51%
  |                                                                                                                              
  |==============================================================                                                          |  52%
  |                                                                                                                              
  |===============================================================                                                         |  53%
  |                                                                                                                              
  |================================================================                                                        |  53%
  |                                                                                                                              
  |================================================================                                                        |  54%
  |                                                                                                                              
  |=================================================================                                                       |  54%
  |                                                                                                                              
  |==================================================================                                                      |  55%
  |                                                                                                                              
  |===================================================================                                                     |  55%
  |                                                                                                                              
  |===================================================================                                                     |  56%
  |                                                                                                                              
  |====================================================================                                                    |  57%
  |                                                                                                                              
  |=====================================================================                                                   |  57%
  |                                                                                                                              
  |=====================================================================                                                   |  58%
  |                                                                                                                              
  |======================================================================                                                  |  58%
  |                                                                                                                              
  |=======================================================================                                                 |  59%
  |                                                                                                                              
  |========================================================================                                                |  60%
  |                                                                                                                              
  |=========================================================================                                               |  61%
  |                                                                                                                              
  |==========================================================================                                              |  62%
  |                                                                                                                              
  |===========================================================================                                             |  62%
  |                                                                                                                              
  |===========================================================================                                             |  63%
  |                                                                                                                              
  |============================================================================                                            |  63%
  |                                                                                                                              
  |=============================================================================                                           |  64%
  |                                                                                                                              
  |=============================================================================                                           |  65%
  |                                                                                                                              
  |==============================================================================                                          |  65%
  |                                                                                                                              
  |===============================================================================                                         |  66%
  |                                                                                                                              
  |================================================================================                                        |  66%
  |                                                                                                                              
  |================================================================================                                        |  67%
  |                                                                                                                              
  |=================================================================================                                       |  67%
  |                                                                                                                              
  |==================================================================================                                      |  68%
  |                                                                                                                              
  |==================================================================================                                      |  69%
  |                                                                                                                              
  |===================================================================================                                     |  69%
  |                                                                                                                              
  |====================================================================================                                    |  70%
  |                                                                                                                              
  |=====================================================================================                                   |  71%
  |                                                                                                                              
  |======================================================================================                                  |  71%
  |                                                                                                                              
  |======================================================================================                                  |  72%
  |                                                                                                                              
  |=======================================================================================                                 |  73%
  |                                                                                                                              
  |========================================================================================                                |  73%
  |                                                                                                                              
  |========================================================================================                                |  74%
  |                                                                                                                              
  |=========================================================================================                               |  74%
  |                                                                                                                              
  |==========================================================================================                              |  75%
  |                                                                                                                              
  |===========================================================================================                             |  75%
  |                                                                                                                              
  |===========================================================================================                             |  76%
  |                                                                                                                              
  |============================================================================================                            |  77%
  |                                                                                                                              
  |=============================================================================================                           |  77%
  |                                                                                                                              
  |=============================================================================================                           |  78%
  |                                                                                                                              
  |==============================================================================================                          |  78%
  |                                                                                                                              
  |===============================================================================================                         |  79%
  |                                                                                                                              
  |================================================================================================                        |  80%
  |                                                                                                                              
  |=================================================================================================                       |  81%
  |                                                                                                                              
  |==================================================================================================                      |  82%
  |                                                                                                                              
  |===================================================================================================                     |  82%
  |                                                                                                                              
  |===================================================================================================                     |  83%
  |                                                                                                                              
  |====================================================================================================                    |  83%
  |                                                                                                                              
  |=====================================================================================================                   |  84%
  |                                                                                                                              
  |=====================================================================================================                   |  85%
  |                                                                                                                              
  |======================================================================================================                  |  85%
  |                                                                                                                              
  |=======================================================================================================                 |  86%
  |                                                                                                                              
  |========================================================================================================                |  86%
  |                                                                                                                              
  |========================================================================================================                |  87%
  |                                                                                                                              
  |=========================================================================================================               |  87%
  |                                                                                                                              
  |==========================================================================================================              |  88%
  |                                                                                                                              
  |==========================================================================================================              |  89%
  |                                                                                                                              
  |===========================================================================================================             |  89%
  |                                                                                                                              
  |============================================================================================================            |  90%
  |                                                                                                                              
  |=============================================================================================================           |  91%
  |                                                                                                                              
  |==============================================================================================================          |  91%
  |                                                                                                                              
  |==============================================================================================================          |  92%
  |                                                                                                                              
  |===============================================================================================================         |  93%
  |                                                                                                                              
  |================================================================================================================        |  93%
  |                                                                                                                              
  |================================================================================================================        |  94%
  |                                                                                                                              
  |=================================================================================================================       |  94%
  |                                                                                                                              
  |==================================================================================================================      |  95%
  |                                                                                                                              
  |===================================================================================================================     |  95%
  |                                                                                                                              
  |===================================================================================================================     |  96%
  |                                                                                                                              
  |====================================================================================================================    |  97%
  |                                                                                                                              
  |=====================================================================================================================   |  97%
  |                                                                                                                              
  |=====================================================================================================================   |  98%
  |                                                                                                                              
  |======================================================================================================================  |  98%
  |                                                                                                                              
  |======================================================================================================================= |  99%
  |                                                                                                                              
  |========================================================================================================================| 100%
[1] "Scaling data matrix"

  |                                                                                                                              
  |                                                                                                                        |   0%
  |                                                                                                                              
  |=======                                                                                                                 |   6%
  |                                                                                                                              
  |=============                                                                                                           |  11%
  |                                                                                                                              
  |====================                                                                                                    |  17%
  |                                                                                                                              
  |===========================                                                                                             |  22%
  |                                                                                                                              
  |=================================                                                                                       |  28%
  |                                                                                                                              
  |========================================                                                                                |  33%
  |                                                                                                                              
  |===============================================                                                                         |  39%
  |                                                                                                                              
  |=====================================================                                                                   |  44%
  |                                                                                                                              
  |============================================================                                                            |  50%
  |                                                                                                                              
  |===================================================================                                                     |  56%
  |                                                                                                                              
  |=========================================================================                                               |  61%
  |                                                                                                                              
  |================================================================================                                        |  67%
  |                                                                                                                              
  |=======================================================================================                                 |  72%
  |                                                                                                                              
  |=============================================================================================                           |  78%
  |                                                                                                                              
  |====================================================================================================                    |  83%
  |                                                                                                                              
  |===========================================================================================================             |  89%
  |                                                                                                                              
  |=================================================================================================================       |  94%
  |                                                                                                                              
  |========================================================================================================================| 100%
tiss <- FindVariableGenes(object = tiss, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.5)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|

Run Principal Component Analysis.

tiss <- RunPCA(object = tiss, do.print = FALSE)
tiss <- ProjectPCA(object = tiss, do.print = FALSE)

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = tiss)

Choose the number of principal components to use.

# Set number of principal components. 
n.pcs = 15

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

For the top-level clustering, aim to under-cluster instead of over-cluster. It will be easy to subset groups and further analyze them below.

# Set resolution 
res.used <- 0.5
tiss <- FindClusters(object = tiss, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
tiss <- RunTSNE(object = tiss, dims.use = 1:n.pcs, seed.use = 10, perplexity=84)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = tiss, do.label = T)

Check expression of genes of interset.

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

How big are the clusters?

table(tiss@ident)

   0    1    2    3    4    5    6    7    8    9 
1137  863  770  700  324  285  278  210  177  153 

Which markers identify a specific cluster?

clust.markers <- FindMarkers(object = tiss, ident.1 = 0, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 10s      
   |+                                                 | 2 % ~02m 16s      
   |++                                                | 3 % ~02m 20s      
   |++                                                | 4 % ~02m 17s      
   |+++                                               | 5 % ~02m 16s      
   |+++                                               | 6 % ~02m 17s      
   |++++                                              | 7 % ~02m 16s      
   |++++                                              | 8 % ~02m 15s      
   |+++++                                             | 9 % ~02m 15s      
   |+++++                                             | 10% ~02m 14s      
   |++++++                                            | 11% ~02m 12s      
   |++++++                                            | 12% ~02m 12s      
   |+++++++                                           | 13% ~02m 10s      
   |+++++++                                           | 14% ~02m 11s      
   |++++++++                                          | 15% ~02m 13s      
   |++++++++                                          | 16% ~02m 11s      
   |+++++++++                                         | 17% ~02m 09s      
   |+++++++++                                         | 18% ~02m 06s      
   |++++++++++                                        | 19% ~02m 04s      
   |++++++++++                                        | 20% ~02m 03s      
   |+++++++++++                                       | 21% ~02m 02s      
   |+++++++++++                                       | 22% ~02m 01s      
   |++++++++++++                                      | 23% ~01m 59s      
   |++++++++++++                                      | 24% ~01m 57s      
   |+++++++++++++                                     | 25% ~01m 56s      
   |+++++++++++++                                     | 26% ~01m 54s      
   |++++++++++++++                                    | 27% ~01m 53s      
   |++++++++++++++                                    | 28% ~01m 54s      
   |+++++++++++++++                                   | 29% ~01m 53s      
   |+++++++++++++++                                   | 30% ~01m 52s      
   |++++++++++++++++                                  | 31% ~01m 50s      
   |++++++++++++++++                                  | 32% ~01m 50s      
   |+++++++++++++++++                                 | 33% ~01m 49s      
   |+++++++++++++++++                                | 34% ~01m 47s      
   |++++++++++++++++++                                | 35% ~01m 45s      
   |++++++++++++++++++                                | 36% ~01m 45s      
   |+++++++++++++++++++                               | 37% ~01m 43s      
   |+++++++++++++++++++                               | 38% ~01m 42s      
   |++++++++++++++++++++                              | 39% ~01m 40s      
   |++++++++++++++++++++                              | 40% ~01m 38s      
   |+++++++++++++++++++++                             | 41% ~01m 36s      
   |+++++++++++++++++++++                             | 42% ~01m 34s      
   |++++++++++++++++++++++                            | 43% ~01m 32s      
   |++++++++++++++++++++++                            | 44% ~01m 31s      
   |+++++++++++++++++++++++                           | 45% ~01m 30s      
   |+++++++++++++++++++++++                           | 46% ~01m 28s      
   |++++++++++++++++++++++++                          | 47% ~01m 27s      
   |++++++++++++++++++++++++                          | 48% ~01m 25s      
   |+++++++++++++++++++++++++                         | 49% ~01m 24s      
   |+++++++++++++++++++++++++                         | 50% ~01m 23s      
   |++++++++++++++++++++++++++                        | 51% ~01m 21s      
   |++++++++++++++++++++++++++                        | 52% ~01m 20s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 18s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 16s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 15s      
   |++++++++++++++++++++++++++++                     | 56% ~01m 13s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 12s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 11s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 10s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 08s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 06s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 05s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 03s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 02s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~60s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~58s          
   |++++++++++++++++++++++++++++++++++                | 67% ~56s          
   |++++++++++++++++++++++++++++++++++               | 68% ~55s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~53s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~51s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~49s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~48s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~46s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~44s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~43s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~42s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~40s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~38s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~37s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~30s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~25s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~23s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 55s
print(x = head(x= clust.markers, n = 10))

You can also compute all markers for all clusters at once. This may take some time.

tiss.markers <- FindAllMarkers(object = tiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03m 03s      
   |++                                                | 2 % ~03m 08s      
   |++                                                | 3 % ~03m 06s      
   |+++                                               | 4 % ~03m 00s      
   |+++                                               | 5 % ~02m 55s      
   |++++                                              | 6 % ~02m 57s      
   |++++                                              | 7 % ~02m 57s      
   |+++++                                             | 8 % ~02m 59s      
   |+++++                                             | 9 % ~03m 01s      
   |++++++                                            | 11% ~03m 04s      
   |++++++                                            | 12% ~03m 02s      
   |+++++++                                           | 13% ~02m 58s      
   |+++++++                                           | 14% ~02m 54s      
   |++++++++                                          | 15% ~02m 49s      
   |++++++++                                          | 16% ~02m 46s      
   |+++++++++                                         | 17% ~02m 43s      
   |+++++++++                                         | 18% ~02m 39s      
   |++++++++++                                        | 19% ~02m 36s      
   |++++++++++                                        | 20% ~02m 33s      
   |+++++++++++                                       | 21% ~02m 31s      
   |++++++++++++                                      | 22% ~02m 29s      
   |++++++++++++                                      | 23% ~02m 26s      
   |+++++++++++++                                     | 24% ~02m 23s      
   |+++++++++++++                                     | 25% ~02m 21s      
   |++++++++++++++                                    | 26% ~02m 19s      
   |++++++++++++++                                    | 27% ~02m 17s      
   |+++++++++++++++                                   | 28% ~02m 15s      
   |+++++++++++++++                                   | 29% ~02m 14s      
   |++++++++++++++++                                  | 31% ~02m 13s      
   |++++++++++++++++                                  | 32% ~02m 12s      
   |+++++++++++++++++                                 | 33% ~02m 10s      
   |+++++++++++++++++                                 | 34% ~02m 07s      
   |++++++++++++++++++                                | 35% ~02m 05s      
   |++++++++++++++++++                                | 36% ~02m 02s      
   |+++++++++++++++++++                               | 37% ~02m 00s      
   |+++++++++++++++++++                               | 38% ~01m 58s      
   |++++++++++++++++++++                              | 39% ~01m 55s      
   |++++++++++++++++++++                              | 40% ~01m 53s      
   |+++++++++++++++++++++                             | 41% ~01m 51s      
   |++++++++++++++++++++++                            | 42% ~01m 49s      
   |++++++++++++++++++++++                            | 43% ~01m 48s      
   |+++++++++++++++++++++++                           | 44% ~01m 46s      
   |+++++++++++++++++++++++                           | 45% ~01m 44s      
   |++++++++++++++++++++++++                          | 46% ~01m 42s      
   |++++++++++++++++++++++++                          | 47% ~01m 40s      
   |+++++++++++++++++++++++++                         | 48% ~01m 37s      
   |+++++++++++++++++++++++++                         | 49% ~01m 35s      
   |++++++++++++++++++++++++++                        | 51% ~01m 33s      
   |++++++++++++++++++++++++++                        | 52% ~01m 31s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 29s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 27s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 24s      
   |++++++++++++++++++++++++++++                      | 56% ~01m 22s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 20s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 18s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 16s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 14s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 12s      
   |++++++++++++++++++++++++++++++++                  | 62% ~01m 10s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 08s      
   |+++++++++++++++++++++++++++++++++                 | 64% ~01m 06s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 04s      
   |++++++++++++++++++++++++++++++++++                | 66% ~01m 02s      
   |++++++++++++++++++++++++++++++++++                | 67% ~60s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~58s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~56s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~54s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~52s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~50s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~48s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~46s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~44s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~42s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~40s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~38s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~36s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~34s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~32s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~30s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~26s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~24s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~22s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~19s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 53s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 32s      
   |++                                                | 2 % ~01m 37s      
   |++                                                | 3 % ~01m 40s      
   |+++                                               | 4 % ~01m 33s      
   |+++                                               | 5 % ~01m 29s      
   |++++                                              | 6 % ~01m 26s      
   |++++                                              | 7 % ~01m 24s      
   |+++++                                             | 8 % ~01m 22s      
   |+++++                                             | 9 % ~01m 20s      
   |++++++                                            | 10% ~01m 18s      
   |++++++                                            | 11% ~01m 17s      
   |+++++++                                           | 12% ~01m 15s      
   |+++++++                                           | 13% ~01m 15s      
   |++++++++                                          | 14% ~01m 14s      
   |++++++++                                          | 15% ~01m 13s      
   |+++++++++                                         | 16% ~01m 12s      
   |+++++++++                                         | 18% ~01m 11s      
   |++++++++++                                        | 19% ~01m 09s      
   |++++++++++                                        | 20% ~01m 08s      
   |+++++++++++                                       | 21% ~01m 07s      
   |+++++++++++                                       | 22% ~01m 06s      
   |++++++++++++                                      | 23% ~01m 05s      
   |++++++++++++                                      | 24% ~01m 04s      
   |+++++++++++++                                     | 25% ~01m 03s      
   |+++++++++++++                                     | 26% ~01m 03s      
   |++++++++++++++                                    | 27% ~01m 02s      
   |++++++++++++++                                    | 28% ~01m 01s      
   |+++++++++++++++                                   | 29% ~01m 00s      
   |+++++++++++++++                                   | 30% ~59s          
   |++++++++++++++++                                  | 31% ~58s          
   |++++++++++++++++                                  | 32% ~57s          
   |+++++++++++++++++                                 | 33% ~56s          
   |++++++++++++++++++                                | 34% ~55s          
   |++++++++++++++++++                                | 35% ~54s          
   |+++++++++++++++++++                               | 36% ~53s          
   |+++++++++++++++++++                               | 37% ~52s          
   |++++++++++++++++++++                              | 38% ~52s          
   |++++++++++++++++++++                              | 39% ~51s          
   |+++++++++++++++++++++                             | 40% ~50s          
   |+++++++++++++++++++++                             | 41% ~49s          
   |++++++++++++++++++++++                            | 42% ~48s          
   |++++++++++++++++++++++                            | 43% ~47s          
   |+++++++++++++++++++++++                           | 44% ~46s          
   |+++++++++++++++++++++++                           | 45% ~45s          
   |++++++++++++++++++++++++                          | 46% ~45s          
   |++++++++++++++++++++++++                          | 47% ~44s          
   |+++++++++++++++++++++++++                         | 48% ~43s          
   |+++++++++++++++++++++++++                         | 49% ~42s          
   |++++++++++++++++++++++++++                        | 51% ~41s          
   |++++++++++++++++++++++++++                        | 52% ~40s          
   |+++++++++++++++++++++++++++                       | 53% ~39s          
   |+++++++++++++++++++++++++++                       | 54% ~38s          
   |++++++++++++++++++++++++++++                      | 55% ~38s          
   |++++++++++++++++++++++++++++                      | 56% ~37s          
   |+++++++++++++++++++++++++++++                     | 57% ~36s          
   |+++++++++++++++++++++++++++++                     | 58% ~35s          
   |++++++++++++++++++++++++++++++                    | 59% ~34s          
   |++++++++++++++++++++++++++++++                    | 60% ~33s          
   |+++++++++++++++++++++++++++++++                   | 61% ~32s          
   |+++++++++++++++++++++++++++++++                   | 62% ~32s          
   |++++++++++++++++++++++++++++++++                  | 63% ~31s          
   |++++++++++++++++++++++++++++++++                  | 64% ~30s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~29s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~28s          
   |++++++++++++++++++++++++++++++++++                | 67% ~27s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~26s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~26s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~25s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~24s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~23s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~22s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~21s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~21s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~20s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~19s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~18s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 24s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05m 10s      
   |++                                                | 2 % ~05m 24s      
   |++                                                | 3 % ~05m 08s      
   |+++                                               | 4 % ~05m 14s      
   |+++                                               | 5 % ~05m 09s      
   |++++                                              | 6 % ~04m 60s      
   |++++                                              | 7 % ~04m 50s      
   |+++++                                             | 8 % ~04m 46s      
   |+++++                                             | 9 % ~04m 38s      
   |++++++                                            | 10% ~04m 31s      
   |++++++                                            | 11% ~04m 24s      
   |+++++++                                           | 12% ~04m 19s      
   |+++++++                                           | 13% ~04m 14s      
   |++++++++                                          | 14% ~04m 09s      
   |++++++++                                          | 15% ~04m 05s      
   |+++++++++                                         | 16% ~04m 01s      
   |+++++++++                                         | 17% ~03m 56s      
   |++++++++++                                        | 18% ~03m 52s      
   |++++++++++                                        | 19% ~03m 49s      
   |+++++++++++                                       | 20% ~03m 45s      
   |+++++++++++                                       | 21% ~03m 42s      
   |++++++++++++                                      | 22% ~03m 38s      
   |++++++++++++                                      | 23% ~03m 36s      
   |+++++++++++++                                     | 24% ~03m 32s      
   |+++++++++++++                                     | 25% ~03m 30s      
   |++++++++++++++                                    | 26% ~03m 28s      
   |++++++++++++++                                    | 27% ~03m 25s      
   |+++++++++++++++                                   | 28% ~03m 23s      
   |+++++++++++++++                                   | 29% ~03m 20s      
   |++++++++++++++++                                  | 30% ~03m 17s      
   |++++++++++++++++                                  | 31% ~03m 14s      
   |+++++++++++++++++                                 | 32% ~03m 12s      
   |+++++++++++++++++                                 | 33% ~03m 09s      
   |++++++++++++++++++                                | 34% ~03m 06s      
   |++++++++++++++++++                                | 35% ~03m 04s      
   |+++++++++++++++++++                               | 36% ~03m 01s      
   |+++++++++++++++++++                               | 37% ~02m 58s      
   |++++++++++++++++++++                              | 38% ~02m 56s      
   |++++++++++++++++++++                              | 39% ~02m 53s      
   |+++++++++++++++++++++                             | 40% ~02m 50s      
   |+++++++++++++++++++++                             | 41% ~02m 47s      
   |++++++++++++++++++++++                            | 42% ~02m 44s      
   |++++++++++++++++++++++                            | 43% ~02m 41s      
   |+++++++++++++++++++++++                           | 44% ~02m 38s      
   |+++++++++++++++++++++++                           | 45% ~02m 36s      
   |++++++++++++++++++++++++                          | 46% ~02m 33s      
   |++++++++++++++++++++++++                          | 47% ~02m 30s      
   |+++++++++++++++++++++++++                         | 48% ~02m 27s      
   |+++++++++++++++++++++++++                         | 49% ~02m 24s      
   |++++++++++++++++++++++++++                        | 51% ~02m 21s      
   |++++++++++++++++++++++++++                        | 52% ~02m 18s      
   |+++++++++++++++++++++++++++                       | 53% ~02m 15s      
   |+++++++++++++++++++++++++++                       | 54% ~02m 12s      
   |++++++++++++++++++++++++++++                      | 55% ~02m 10s      
   |++++++++++++++++++++++++++++                      | 56% ~02m 07s      
   |+++++++++++++++++++++++++++++                     | 57% ~02m 04s      
   |+++++++++++++++++++++++++++++                     | 58% ~02m 01s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 58s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 55s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 52s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 49s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 46s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 42s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 39s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~01m 37s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 34s      
   |++++++++++++++++++++++++++++++++++                | 68% ~01m 31s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 28s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~01m 25s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 22s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~01m 19s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 16s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01m 13s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01m 10s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 07s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 05s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 02s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~59s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~56s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~53s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~50s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~47s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~44s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~42s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~39s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~36s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~30s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~27s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~25s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~22s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 04m 28s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 07s      
   |++                                                | 2 % ~01m 07s      
   |++                                                | 3 % ~01m 06s      
   |+++                                               | 4 % ~01m 05s      
   |+++                                               | 5 % ~01m 05s      
   |++++                                              | 6 % ~01m 04s      
   |++++                                              | 8 % ~01m 04s      
   |+++++                                             | 9 % ~01m 03s      
   |+++++                                             | 10% ~01m 03s      
   |++++++                                            | 11% ~01m 02s      
   |++++++                                            | 12% ~01m 02s      
   |+++++++                                           | 13% ~01m 01s      
   |+++++++                                           | 14% ~01m 01s      
   |++++++++                                          | 15% ~01m 00s      
   |+++++++++                                         | 16% ~59s          
   |+++++++++                                         | 17% ~59s          
   |++++++++++                                        | 18% ~58s          
   |++++++++++                                        | 19% ~57s          
   |+++++++++++                                       | 20% ~56s          
   |+++++++++++                                       | 22% ~56s          
   |++++++++++++                                      | 23% ~55s          
   |++++++++++++                                      | 24% ~54s          
   |+++++++++++++                                     | 25% ~53s          
   |+++++++++++++                                     | 26% ~52s          
   |++++++++++++++                                    | 27% ~51s          
   |++++++++++++++                                    | 28% ~50s          
   |+++++++++++++++                                   | 29% ~50s          
   |++++++++++++++++                                  | 30% ~49s          
   |++++++++++++++++                                  | 31% ~48s          
   |+++++++++++++++++                                 | 32% ~47s          
   |+++++++++++++++++                                 | 33% ~47s          
   |++++++++++++++++++                                | 34% ~46s          
   |++++++++++++++++++                                | 35% ~45s          
   |+++++++++++++++++++                               | 37% ~44s          
   |+++++++++++++++++++                               | 38% ~43s          
   |++++++++++++++++++++                              | 39% ~42s          
   |++++++++++++++++++++                              | 40% ~42s          
   |+++++++++++++++++++++                             | 41% ~41s          
   |+++++++++++++++++++++                             | 42% ~40s          
   |++++++++++++++++++++++                            | 43% ~39s          
   |+++++++++++++++++++++++                           | 44% ~39s          
   |+++++++++++++++++++++++                           | 45% ~38s          
   |++++++++++++++++++++++++                          | 46% ~37s          
   |++++++++++++++++++++++++                          | 47% ~36s          
   |+++++++++++++++++++++++++                         | 48% ~35s          
   |+++++++++++++++++++++++++                         | 49% ~35s          
   |++++++++++++++++++++++++++                        | 51% ~34s          
   |++++++++++++++++++++++++++                        | 52% ~33s          
   |+++++++++++++++++++++++++++                       | 53% ~32s          
   |+++++++++++++++++++++++++++                       | 54% ~32s          
   |++++++++++++++++++++++++++++                      | 55% ~31s          
   |++++++++++++++++++++++++++++                      | 56% ~30s          
   |+++++++++++++++++++++++++++++                     | 57% ~30s          
   |++++++++++++++++++++++++++++++                    | 58% ~29s          
   |++++++++++++++++++++++++++++++                    | 59% ~28s          
   |+++++++++++++++++++++++++++++++                   | 60% ~27s          
   |+++++++++++++++++++++++++++++++                   | 61% ~26s          
   |++++++++++++++++++++++++++++++++                  | 62% ~26s          
   |++++++++++++++++++++++++++++++++                  | 63% ~25s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~24s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~23s          
   |++++++++++++++++++++++++++++++++++                | 67% ~23s          
   |++++++++++++++++++++++++++++++++++                | 68% ~22s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~21s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~20s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~20s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~19s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~18s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~18s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~17s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~16s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~15s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~15s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 07s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 05s      
   |++                                                | 2 % ~01m 04s      
   |++                                                | 3 % ~01m 04s      
   |+++                                               | 4 % ~01m 03s      
   |+++                                               | 5 % ~01m 02s      
   |++++                                              | 6 % ~01m 02s      
   |++++                                              | 7 % ~01m 01s      
   |+++++                                             | 8 % ~01m 01s      
   |+++++                                             | 9 % ~60s          
   |++++++                                            | 11% ~59s          
   |++++++                                            | 12% ~58s          
   |+++++++                                           | 13% ~58s          
   |+++++++                                           | 14% ~57s          
   |++++++++                                          | 15% ~56s          
   |++++++++                                          | 16% ~56s          
   |+++++++++                                         | 17% ~55s          
   |+++++++++                                         | 18% ~54s          
   |++++++++++                                        | 19% ~53s          
   |++++++++++                                        | 20% ~53s          
   |+++++++++++                                       | 21% ~52s          
   |++++++++++++                                      | 22% ~51s          
   |++++++++++++                                      | 23% ~51s          
   |+++++++++++++                                     | 24% ~50s          
   |+++++++++++++                                     | 25% ~49s          
   |++++++++++++++                                    | 26% ~49s          
   |++++++++++++++                                    | 27% ~48s          
   |+++++++++++++++                                   | 28% ~47s          
   |+++++++++++++++                                   | 29% ~47s          
   |++++++++++++++++                                  | 31% ~46s          
   |++++++++++++++++                                  | 32% ~45s          
   |+++++++++++++++++                                 | 33% ~45s          
   |+++++++++++++++++                                 | 34% ~44s          
   |++++++++++++++++++                                | 35% ~43s          
   |++++++++++++++++++                                | 36% ~42s          
   |+++++++++++++++++++                               | 37% ~42s          
   |+++++++++++++++++++                               | 38% ~41s          
   |++++++++++++++++++++                              | 39% ~40s          
   |++++++++++++++++++++                              | 40% ~40s          
   |+++++++++++++++++++++                             | 41% ~39s          
   |++++++++++++++++++++++                            | 42% ~38s          
   |++++++++++++++++++++++                            | 43% ~38s          
   |+++++++++++++++++++++++                           | 44% ~37s          
   |+++++++++++++++++++++++                           | 45% ~36s          
   |++++++++++++++++++++++++                          | 46% ~36s          
   |++++++++++++++++++++++++                          | 47% ~35s          
   |+++++++++++++++++++++++++                         | 48% ~34s          
   |+++++++++++++++++++++++++                         | 49% ~34s          
   |++++++++++++++++++++++++++                        | 51% ~33s          
   |++++++++++++++++++++++++++                        | 52% ~32s          
   |+++++++++++++++++++++++++++                       | 53% ~31s          
   |+++++++++++++++++++++++++++                       | 54% ~31s          
   |++++++++++++++++++++++++++++                      | 55% ~30s          
   |++++++++++++++++++++++++++++                      | 56% ~29s          
   |+++++++++++++++++++++++++++++                     | 57% ~29s          
   |+++++++++++++++++++++++++++++                     | 58% ~28s          
   |++++++++++++++++++++++++++++++                    | 59% ~27s          
   |++++++++++++++++++++++++++++++                    | 60% ~27s          
   |+++++++++++++++++++++++++++++++                   | 61% ~26s          
   |++++++++++++++++++++++++++++++++                  | 62% ~25s          
   |++++++++++++++++++++++++++++++++                  | 63% ~24s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~24s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~23s          
   |++++++++++++++++++++++++++++++++++                | 66% ~22s          
   |++++++++++++++++++++++++++++++++++                | 67% ~22s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~21s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~20s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~20s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~19s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~18s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~18s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~17s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~16s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~15s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~15s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~14s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 06s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 35s      
   |++                                                | 2 % ~01m 33s      
   |++                                                | 3 % ~01m 33s      
   |+++                                               | 4 % ~01m 32s      
   |+++                                               | 5 % ~01m 30s      
   |++++                                              | 6 % ~01m 30s      
   |++++                                              | 7 % ~01m 29s      
   |+++++                                             | 8 % ~01m 28s      
   |+++++                                             | 9 % ~01m 27s      
   |++++++                                            | 11% ~01m 26s      
   |++++++                                            | 12% ~01m 25s      
   |+++++++                                           | 13% ~01m 24s      
   |+++++++                                           | 14% ~01m 23s      
   |++++++++                                          | 15% ~01m 23s      
   |++++++++                                          | 16% ~01m 22s      
   |+++++++++                                         | 17% ~01m 21s      
   |+++++++++                                         | 18% ~01m 20s      
   |++++++++++                                        | 19% ~01m 19s      
   |++++++++++                                        | 20% ~01m 18s      
   |+++++++++++                                       | 21% ~01m 17s      
   |++++++++++++                                      | 22% ~01m 16s      
   |++++++++++++                                      | 23% ~01m 14s      
   |+++++++++++++                                     | 24% ~01m 13s      
   |+++++++++++++                                     | 25% ~01m 12s      
   |++++++++++++++                                    | 26% ~01m 11s      
   |++++++++++++++                                    | 27% ~01m 10s      
   |+++++++++++++++                                   | 28% ~01m 09s      
   |+++++++++++++++                                   | 29% ~01m 09s      
   |++++++++++++++++                                  | 31% ~01m 08s      
   |++++++++++++++++                                  | 32% ~01m 07s      
   |+++++++++++++++++                                 | 33% ~01m 06s      
   |+++++++++++++++++                                 | 34% ~01m 05s      
   |++++++++++++++++++                                | 35% ~01m 03s      
   |++++++++++++++++++                                | 36% ~01m 02s      
   |+++++++++++++++++++                               | 37% ~01m 01s      
   |+++++++++++++++++++                               | 38% ~01m 00s      
   |++++++++++++++++++++                              | 39% ~59s          
   |++++++++++++++++++++                              | 40% ~58s          
   |+++++++++++++++++++++                             | 41% ~57s          
   |++++++++++++++++++++++                            | 42% ~56s          
   |++++++++++++++++++++++                            | 43% ~55s          
   |+++++++++++++++++++++++                           | 44% ~54s          
   |+++++++++++++++++++++++                           | 45% ~53s          
   |++++++++++++++++++++++++                          | 46% ~52s          
   |++++++++++++++++++++++++                          | 47% ~51s          
   |+++++++++++++++++++++++++                         | 48% ~50s          
   |+++++++++++++++++++++++++                         | 49% ~49s          
   |++++++++++++++++++++++++++                        | 51% ~48s          
   |++++++++++++++++++++++++++                        | 52% ~47s          
   |+++++++++++++++++++++++++++                       | 53% ~46s          
   |+++++++++++++++++++++++++++                       | 54% ~45s          
   |++++++++++++++++++++++++++++                      | 55% ~44s          
   |++++++++++++++++++++++++++++                      | 56% ~43s          
   |+++++++++++++++++++++++++++++                     | 57% ~42s          
   |+++++++++++++++++++++++++++++                     | 58% ~41s          
   |++++++++++++++++++++++++++++++                    | 59% ~40s          
   |++++++++++++++++++++++++++++++                    | 60% ~39s          
   |+++++++++++++++++++++++++++++++                   | 61% ~38s          
   |++++++++++++++++++++++++++++++++                  | 62% ~37s          
   |++++++++++++++++++++++++++++++++                  | 63% ~36s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~35s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~34s          
   |++++++++++++++++++++++++++++++++++                | 66% ~33s          
   |++++++++++++++++++++++++++++++++++                | 67% ~32s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~31s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~30s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~29s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~28s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~27s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~26s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~25s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~24s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~23s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~21s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~20s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 37s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~58s          
   |++                                                | 2 % ~58s          
   |++                                                | 3 % ~58s          
   |+++                                               | 4 % ~01m 02s      
   |+++                                               | 5 % ~01m 00s      
   |++++                                              | 6 % ~59s          
   |++++                                              | 7 % ~58s          
   |+++++                                             | 8 % ~57s          
   |+++++                                             | 9 % ~57s          
   |++++++                                            | 10% ~56s          
   |++++++                                            | 11% ~56s          
   |+++++++                                           | 12% ~55s          
   |+++++++                                           | 13% ~54s          
   |++++++++                                          | 14% ~54s          
   |++++++++                                          | 15% ~53s          
   |+++++++++                                         | 16% ~53s          
   |+++++++++                                         | 18% ~52s          
   |++++++++++                                        | 19% ~51s          
   |++++++++++                                        | 20% ~51s          
   |+++++++++++                                       | 21% ~50s          
   |+++++++++++                                       | 22% ~49s          
   |++++++++++++                                      | 23% ~49s          
   |++++++++++++                                      | 24% ~48s          
   |+++++++++++++                                     | 25% ~47s          
   |+++++++++++++                                     | 26% ~47s          
   |++++++++++++++                                    | 27% ~46s          
   |++++++++++++++                                    | 28% ~45s          
   |+++++++++++++++                                   | 29% ~45s          
   |+++++++++++++++                                   | 30% ~44s          
   |++++++++++++++++                                  | 31% ~44s          
   |++++++++++++++++                                  | 32% ~43s          
   |+++++++++++++++++                                 | 33% ~42s          
   |++++++++++++++++++                                | 34% ~42s          
   |++++++++++++++++++                                | 35% ~41s          
   |+++++++++++++++++++                               | 36% ~40s          
   |+++++++++++++++++++                               | 37% ~40s          
   |++++++++++++++++++++                              | 38% ~39s          
   |++++++++++++++++++++                              | 39% ~38s          
   |+++++++++++++++++++++                             | 40% ~38s          
   |+++++++++++++++++++++                             | 41% ~37s          
   |++++++++++++++++++++++                            | 42% ~36s          
   |++++++++++++++++++++++                            | 43% ~36s          
   |+++++++++++++++++++++++                           | 44% ~35s          
   |+++++++++++++++++++++++                           | 45% ~34s          
   |++++++++++++++++++++++++                          | 46% ~34s          
   |++++++++++++++++++++++++                          | 47% ~33s          
   |+++++++++++++++++++++++++                         | 48% ~33s          
   |+++++++++++++++++++++++++                         | 49% ~32s          
   |++++++++++++++++++++++++++                        | 51% ~31s          
   |++++++++++++++++++++++++++                        | 52% ~31s          
   |+++++++++++++++++++++++++++                       | 53% ~30s          
   |+++++++++++++++++++++++++++                       | 54% ~29s          
   |++++++++++++++++++++++++++++                      | 55% ~29s          
   |++++++++++++++++++++++++++++                      | 56% ~28s          
   |+++++++++++++++++++++++++++++                     | 57% ~27s          
   |+++++++++++++++++++++++++++++                     | 58% ~27s          
   |++++++++++++++++++++++++++++++                    | 59% ~26s          
   |++++++++++++++++++++++++++++++                    | 60% ~26s          
   |+++++++++++++++++++++++++++++++                   | 61% ~25s          
   |+++++++++++++++++++++++++++++++                   | 62% ~24s          
   |++++++++++++++++++++++++++++++++                  | 63% ~24s          
   |++++++++++++++++++++++++++++++++                  | 64% ~23s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~22s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~22s          
   |++++++++++++++++++++++++++++++++++                | 67% ~21s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~20s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~20s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~19s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~18s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~18s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~17s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~16s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~16s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~15s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~14s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~14s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 03s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 39s      
   |++                                                | 2 % ~01m 39s      
   |++                                                | 3 % ~01m 38s      
   |+++                                               | 4 % ~01m 38s      
   |+++                                               | 5 % ~01m 37s      
   |++++                                              | 6 % ~01m 36s      
   |++++                                              | 7 % ~01m 35s      
   |+++++                                             | 8 % ~01m 34s      
   |+++++                                             | 9 % ~01m 33s      
   |++++++                                            | 10% ~01m 32s      
   |++++++                                            | 11% ~01m 31s      
   |+++++++                                           | 12% ~01m 30s      
   |+++++++                                           | 13% ~01m 29s      
   |++++++++                                          | 14% ~01m 28s      
   |++++++++                                          | 15% ~01m 27s      
   |+++++++++                                         | 16% ~01m 26s      
   |+++++++++                                         | 17% ~01m 25s      
   |++++++++++                                        | 18% ~01m 24s      
   |++++++++++                                        | 19% ~01m 23s      
   |+++++++++++                                       | 20% ~01m 22s      
   |+++++++++++                                       | 21% ~01m 21s      
   |++++++++++++                                      | 22% ~01m 20s      
   |++++++++++++                                      | 23% ~01m 19s      
   |+++++++++++++                                     | 24% ~01m 18s      
   |+++++++++++++                                     | 25% ~01m 17s      
   |++++++++++++++                                    | 26% ~01m 16s      
   |++++++++++++++                                    | 27% ~01m 15s      
   |+++++++++++++++                                   | 28% ~01m 14s      
   |+++++++++++++++                                   | 29% ~01m 13s      
   |++++++++++++++++                                  | 30% ~01m 12s      
   |++++++++++++++++                                  | 31% ~01m 11s      
   |+++++++++++++++++                                 | 32% ~01m 10s      
   |+++++++++++++++++                                 | 33% ~01m 09s      
   |++++++++++++++++++                                | 34% ~01m 08s      
   |++++++++++++++++++                                | 35% ~01m 06s      
   |+++++++++++++++++++                               | 36% ~01m 05s      
   |+++++++++++++++++++                               | 37% ~01m 04s      
   |++++++++++++++++++++                              | 38% ~01m 03s      
   |++++++++++++++++++++                              | 39% ~01m 02s      
   |+++++++++++++++++++++                             | 40% ~01m 01s      
   |+++++++++++++++++++++                             | 41% ~01m 00s      
   |++++++++++++++++++++++                            | 42% ~59s          
   |++++++++++++++++++++++                            | 43% ~58s          
   |+++++++++++++++++++++++                           | 44% ~57s          
   |+++++++++++++++++++++++                           | 45% ~56s          
   |++++++++++++++++++++++++                          | 46% ~55s          
   |++++++++++++++++++++++++                          | 47% ~54s          
   |+++++++++++++++++++++++++                         | 48% ~53s          
   |+++++++++++++++++++++++++                         | 49% ~52s          
   |++++++++++++++++++++++++++                        | 51% ~51s          
   |++++++++++++++++++++++++++                        | 52% ~50s          
   |+++++++++++++++++++++++++++                       | 53% ~49s          
   |+++++++++++++++++++++++++++                       | 54% ~48s          
   |++++++++++++++++++++++++++++                      | 55% ~47s          
   |++++++++++++++++++++++++++++                      | 56% ~46s          
   |+++++++++++++++++++++++++++++                     | 57% ~44s          
   |+++++++++++++++++++++++++++++                     | 58% ~43s          
   |++++++++++++++++++++++++++++++                    | 59% ~42s          
   |++++++++++++++++++++++++++++++                    | 60% ~41s          
   |+++++++++++++++++++++++++++++++                   | 61% ~40s          
   |+++++++++++++++++++++++++++++++                   | 62% ~39s          
   |++++++++++++++++++++++++++++++++                  | 63% ~38s          
   |++++++++++++++++++++++++++++++++                  | 64% ~37s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~36s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~35s          
   |++++++++++++++++++++++++++++++++++                | 67% ~34s          
   |++++++++++++++++++++++++++++++++++                | 68% ~33s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~32s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~31s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~30s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~29s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~28s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~27s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~26s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~25s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~24s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~23s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~22s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~19s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 42s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 33s      
   |++                                                | 2 % ~01m 32s      
   |++                                                | 3 % ~01m 31s      
   |+++                                               | 4 % ~01m 30s      
   |+++                                               | 5 % ~01m 29s      
   |++++                                              | 6 % ~01m 29s      
   |++++                                              | 7 % ~01m 28s      
   |+++++                                             | 8 % ~01m 27s      
   |+++++                                             | 9 % ~01m 27s      
   |++++++                                            | 10% ~01m 26s      
   |++++++                                            | 11% ~01m 25s      
   |+++++++                                           | 12% ~01m 24s      
   |+++++++                                           | 13% ~01m 23s      
   |++++++++                                          | 14% ~01m 22s      
   |++++++++                                          | 15% ~01m 21s      
   |+++++++++                                         | 16% ~01m 20s      
   |+++++++++                                         | 17% ~01m 19s      
   |++++++++++                                        | 18% ~01m 18s      
   |++++++++++                                        | 19% ~01m 17s      
   |+++++++++++                                       | 20% ~01m 16s      
   |+++++++++++                                       | 21% ~01m 15s      
   |++++++++++++                                      | 22% ~01m 14s      
   |++++++++++++                                      | 23% ~01m 14s      
   |+++++++++++++                                     | 24% ~01m 13s      
   |+++++++++++++                                     | 25% ~01m 12s      
   |++++++++++++++                                    | 26% ~01m 11s      
   |++++++++++++++                                    | 27% ~01m 10s      
   |+++++++++++++++                                   | 28% ~01m 09s      
   |+++++++++++++++                                   | 29% ~01m 08s      
   |++++++++++++++++                                  | 30% ~01m 07s      
   |++++++++++++++++                                  | 31% ~01m 06s      
   |+++++++++++++++++                                 | 32% ~01m 05s      
   |+++++++++++++++++                                 | 33% ~01m 04s      
   |++++++++++++++++++                                | 34% ~01m 03s      
   |++++++++++++++++++                                | 35% ~01m 02s      
   |+++++++++++++++++++                               | 36% ~01m 01s      
   |+++++++++++++++++++                               | 37% ~60s          
   |++++++++++++++++++++                              | 38% ~59s          
   |++++++++++++++++++++                              | 39% ~58s          
   |+++++++++++++++++++++                             | 40% ~57s          
   |+++++++++++++++++++++                             | 41% ~56s          
   |++++++++++++++++++++++                            | 42% ~55s          
   |++++++++++++++++++++++                            | 43% ~54s          
   |+++++++++++++++++++++++                           | 44% ~53s          
   |+++++++++++++++++++++++                           | 45% ~52s          
   |++++++++++++++++++++++++                          | 46% ~51s          
   |++++++++++++++++++++++++                          | 47% ~50s          
   |+++++++++++++++++++++++++                         | 48% ~49s          
   |+++++++++++++++++++++++++                         | 49% ~48s          
   |++++++++++++++++++++++++++                        | 51% ~47s          
   |++++++++++++++++++++++++++                        | 52% ~46s          
   |+++++++++++++++++++++++++++                       | 53% ~45s          
   |+++++++++++++++++++++++++++                       | 54% ~44s          
   |++++++++++++++++++++++++++++                      | 55% ~43s          
   |++++++++++++++++++++++++++++                      | 56% ~43s          
   |+++++++++++++++++++++++++++++                     | 57% ~42s          
   |+++++++++++++++++++++++++++++                     | 58% ~41s          
   |++++++++++++++++++++++++++++++                    | 59% ~40s          
   |++++++++++++++++++++++++++++++                    | 60% ~39s          
   |+++++++++++++++++++++++++++++++                   | 61% ~38s          
   |+++++++++++++++++++++++++++++++                   | 62% ~37s          
   |++++++++++++++++++++++++++++++++                  | 63% ~36s          
   |++++++++++++++++++++++++++++++++                  | 64% ~35s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~34s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~33s          
   |++++++++++++++++++++++++++++++++++                | 67% ~32s          
   |++++++++++++++++++++++++++++++++++                | 68% ~31s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~30s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~29s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~28s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~27s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~26s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~25s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~24s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~23s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~22s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~21s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~20s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 36s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 30s      
   |++                                                | 2 % ~01m 29s      
   |++                                                | 3 % ~01m 29s      
   |+++                                               | 4 % ~01m 28s      
   |+++                                               | 5 % ~01m 27s      
   |++++                                              | 6 % ~01m 26s      
   |++++                                              | 7 % ~01m 28s      
   |+++++                                             | 8 % ~01m 27s      
   |+++++                                             | 9 % ~01m 26s      
   |++++++                                            | 10% ~01m 25s      
   |++++++                                            | 11% ~01m 24s      
   |+++++++                                           | 12% ~01m 23s      
   |+++++++                                           | 13% ~01m 22s      
   |++++++++                                          | 14% ~01m 21s      
   |++++++++                                          | 15% ~01m 20s      
   |+++++++++                                         | 16% ~01m 19s      
   |+++++++++                                         | 18% ~01m 18s      
   |++++++++++                                        | 19% ~01m 17s      
   |++++++++++                                        | 20% ~01m 16s      
   |+++++++++++                                       | 21% ~01m 15s      
   |+++++++++++                                       | 22% ~01m 14s      
   |++++++++++++                                      | 23% ~01m 13s      
   |++++++++++++                                      | 24% ~01m 12s      
   |+++++++++++++                                     | 25% ~01m 11s      
   |+++++++++++++                                     | 26% ~01m 10s      
   |++++++++++++++                                    | 27% ~01m 09s      
   |++++++++++++++                                    | 28% ~01m 08s      
   |+++++++++++++++                                   | 29% ~01m 07s      
   |+++++++++++++++                                   | 30% ~01m 06s      
   |++++++++++++++++                                  | 31% ~01m 05s      
   |++++++++++++++++                                  | 32% ~01m 04s      
   |+++++++++++++++++                                 | 33% ~01m 03s      
   |++++++++++++++++++                                | 34% ~01m 02s      
   |++++++++++++++++++                                | 35% ~01m 01s      
   |+++++++++++++++++++                               | 36% ~60s          
   |+++++++++++++++++++                               | 37% ~59s          
   |++++++++++++++++++++                              | 38% ~58s          
   |++++++++++++++++++++                              | 39% ~57s          
   |+++++++++++++++++++++                             | 40% ~56s          
   |+++++++++++++++++++++                             | 41% ~55s          
   |++++++++++++++++++++++                            | 42% ~54s          
   |++++++++++++++++++++++                            | 43% ~53s          
   |+++++++++++++++++++++++                           | 44% ~52s          
   |+++++++++++++++++++++++                           | 45% ~51s          
   |++++++++++++++++++++++++                          | 46% ~50s          
   |++++++++++++++++++++++++                          | 47% ~49s          
   |+++++++++++++++++++++++++                         | 48% ~48s          
   |+++++++++++++++++++++++++                         | 49% ~47s          
   |++++++++++++++++++++++++++                        | 51% ~46s          
   |++++++++++++++++++++++++++                        | 52% ~45s          
   |+++++++++++++++++++++++++++                       | 53% ~44s          
   |+++++++++++++++++++++++++++                       | 54% ~44s          
   |++++++++++++++++++++++++++++                      | 55% ~43s          
   |++++++++++++++++++++++++++++                      | 56% ~42s          
   |+++++++++++++++++++++++++++++                     | 57% ~41s          
   |+++++++++++++++++++++++++++++                     | 58% ~40s          
   |++++++++++++++++++++++++++++++                    | 59% ~39s          
   |++++++++++++++++++++++++++++++                    | 60% ~38s          
   |+++++++++++++++++++++++++++++++                   | 61% ~37s          
   |+++++++++++++++++++++++++++++++                   | 62% ~36s          
   |++++++++++++++++++++++++++++++++                  | 63% ~35s          
   |++++++++++++++++++++++++++++++++                  | 64% ~34s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~33s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~32s          
   |++++++++++++++++++++++++++++++++++                | 67% ~31s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~30s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~29s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~28s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~27s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~26s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~25s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~24s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~23s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~22s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~21s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~20s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 33s
head(tiss.markers)

Display the top markers you computed above.

tiss.markers %>% group_by(cluster) %>% top_n(5, avg_diff)

Assigning cell type identity to clusters

At a coarse level, we can use canonical markers to match the unbiased clustering to known cell types:

0: alpha 1: beta 2: beta 3: exocrine 4: duct 5: delta 6: gamma 7: endothelial 8: immune 9: stellate

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

Print a table showing the count of cells in each identity category from each plate.

Subset and iterate

We can repeat the above analysis on a subset of cells, defined using cluster IDs or some other metadata. This is a good way to drill down and find substructure.

Subset == T and NK cells (Cluster 7)

Run Principal Component Analysis.

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

Choose the number of principal components to use.

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

To visualize

Check expression of genes of interset.

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

How big are the clusters?

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

Print a table showing the count of cells in each identity category from each plate.

Assigning subannotations

For the subsets, we produce subannotations. These will be written back as metadata in the original object, so we can see all subannotations together.

If some of the clusters you find in the subset deserve additional annotation, you can add that right here. Use NA for clusters for which no subannotation is needed.

When you save the subtissue, please give it a name.

Export the final metadata

So that Biohub can easily combine all your annotations, please export them as a simple csv.

LS0tCnRpdGxlOiAiTWFycm93IEZBQ1MgTm90ZWJvb2siCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCkVudGVyIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIG1hY2EgZm9sZGVyIG9uIHlvdXIgZHJpdmUgYW5kIHRoZSBuYW1lIG9mIHRoZSB0aXNzdWUgeW91IHdhbnQgdG8gYW5hbHl6ZS4KCmBgYHtyfQp0aXNzdWVfb2ZfaW50ZXJlc3QgPSAiTWFycm93IgpgYGAKCkxvYWQgdGhlIHJlcXVpc2l0ZSBwYWNrYWdlcyBhbmQgc29tZSBhZGRpdGlvbmFsIGhlbHBlciBmdW5jdGlvbnMuCgpgYGB7cn0KbGlicmFyeShoZXJlKQpsaWJyYXJ5KHVzZWZ1bCkKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoTWF0cml4KQoKc2F2ZV9kaXIgPSBoZXJlKCcwMF9kYXRhX2luZ2VzdCcsICd0aXNzdWVfcm9iaicpCmBgYAoKCgpgYGB7cn0KIyByZWFkIHRoZSBtZXRhZGF0YSB0byBnZXQgdGhlIHBsYXRlcyB3ZSB3YW50CnBsYXRlX21ldGFkYXRhX2ZpbGVuYW1lID0gaGVyZSgnMDBfZGF0YV9pbmdlc3QnLCAnZmFjc19yYXdfZGF0YScsICdtZXRhZGF0YV9GQUNTLmNzdicpCgpwbGF0ZV9tZXRhZGF0YSA8LSByZWFkLmNzdihwbGF0ZV9tZXRhZGF0YV9maWxlbmFtZSwgc2VwPSIsIiwgaGVhZGVyID0gVFJVRSkKY29sbmFtZXMocGxhdGVfbWV0YWRhdGEpWzFdIDwtICJwbGF0ZS5iYXJjb2RlIgpwbGF0ZV9tZXRhZGF0YQpgYGAKClN1YnNldCB0aGUgbWV0YWRhdGEgb24gdGhlIHRpc3N1ZS4KCmBgYHtyfQp0aXNzdWVfcGxhdGVzID0gZmlsdGVyKHBsYXRlX21ldGFkYXRhLCB0aXNzdWUgPT0gdGlzc3VlX29mX2ludGVyZXN0KVssYygncGxhdGUuYmFyY29kZScsJ3Rpc3N1ZScsJ3N1YnRpc3N1ZScsJ21vdXNlLnNleCcpXQp0aXNzdWVfcGxhdGVzCmBgYAoKTG9hZCB0aGUgcmVhZCBjb3VudCBkYXRhLgpgYGB7cn0KI0xvYWQgdGhlIGdlbmUgbmFtZXMgYW5kIHNldCB0aGUgbWV0YWRhdGEgY29sdW1ucyBieSBvcGVuaW5nIHRoZSBmaXJzdCBmaWxlCmZpbGVuYW1lID0gaGVyZSgnMDBfZGF0YV9pbmdlc3QnLCAnZmFjc19yYXdfZGF0YScsICdGQUNTJywgcGFzdGUwKHRpc3N1ZV9vZl9pbnRlcmVzdCwgJy1jb3VudHMuY3N2JykpCgpyYXcuZGF0YSA9IHJlYWQuY3N2KGZpbGVuYW1lLCBzZXA9IiwiLCByb3cubmFtZXM9MSkKIyByYXcuZGF0YSA9IGRhdGEuZnJhbWUocm93Lm5hbWVzID0gcm93bmFtZXMocmF3LmRhdGEpKQpjb3JuZXIocmF3LmRhdGEpCmBgYApNYWtlIGEgdmVjdG9yIG9mIHBsYXRlIGJhcmNvZGVzIGZvciBlYWNoIGNlbGwKCmBgYHtyfQpwbGF0ZS5iYXJjb2RlcyA9IGxhcHBseShjb2xuYW1lcyhyYXcuZGF0YSksIGZ1bmN0aW9uKHgpIHN0cnNwbGl0KHN0cnNwbGl0KHgsICJfIilbWzFdXVsxXSwgJy4nLCBmaXhlZD1UUlVFKVtbMV1dWzJdKQpoZWFkKHBsYXRlLmJhcmNvZGVzKQpgYGAKClVzZSBvbmx5IHRoZSBtZXRhZGF0YSByb3dzIGNvcnJlc3BvbmRpbmcgdG8gQmxhZGRlciBwbGF0ZXMuIE1ha2UgYSBwbGF0ZSBiYXJjb2RlIGRhdGFmcmFtZSB0byAiZXhwYW5kIiB0aGUgcGVyLXBsYXRlIG1ldGFkYXRhIHRvIGJlIHBlci1jZWxsLgpgYGB7cn0KYmFyY29kZS5kZiA9IHQuZGF0YS5mcmFtZShhcy5kYXRhLmZyYW1lKHBsYXRlLmJhcmNvZGVzKSkKCnJvd25hbWVzKGJhcmNvZGUuZGYpID0gY29sbmFtZXMocmF3LmRhdGEpCmNvbG5hbWVzKGJhcmNvZGUuZGYpID0gYygncGxhdGUuYmFyY29kZScpCmhlYWQoYmFyY29kZS5kZikKCnJuYW1lcyA9IHJvdy5uYW1lcyhiYXJjb2RlLmRmKQptZXRhLmRhdGEgPC0gbWVyZ2UoYmFyY29kZS5kZiwgcGxhdGVfbWV0YWRhdGEsIGJ5PSdwbGF0ZS5iYXJjb2RlJywgc29ydCA9IEYpCnJvdy5uYW1lcyhtZXRhLmRhdGEpIDwtIHJuYW1lcwoKIyBTb3J0IGNlbGxzIGJ5IHBsYXRlIGJhcmNvZGUgYmVjYXVzZSB0aGF0J3MgaG93IHRoZSBkYXRhIHdhcyBvcmlnaW5hbGx5Cm1ldGEuZGF0YSA9IG1ldGEuZGF0YVtvcmRlcihtZXRhLmRhdGEkcGxhdGUuYmFyY29kZSksIF0KY29ybmVyKG1ldGEuZGF0YSkKcmF3LmRhdGEgPSByYXcuZGF0YVssIHJvd25hbWVzKG1ldGEuZGF0YSldCmNvcm5lcihyYXcuZGF0YSkKYGBgClByb2Nlc3MgdGhlIHJhdyBkYXRhIGFuZCBsb2FkIGl0IGludG8gdGhlIFNldXJhdCBvYmplY3QuCgpgYGB7cn0KIyBGaW5kIEVSQ0MncywgY29tcHV0ZSB0aGUgcGVyY2VudCBFUkNDLCBhbmQgZHJvcCB0aGVtIGZyb20gdGhlIHJhdyBkYXRhLgplcmNjcyA8LSBncmVwKHBhdHRlcm4gPSAiXkVSQ0MtIiwgeCA9IHJvd25hbWVzKHggPSByYXcuZGF0YSksIHZhbHVlID0gVFJVRSkKcGVyY2VudC5lcmNjIDwtIE1hdHJpeDo6Y29sU3VtcyhyYXcuZGF0YVtlcmNjcywgXSkvTWF0cml4Ojpjb2xTdW1zKHJhdy5kYXRhKQplcmNjLmluZGV4IDwtIGdyZXAocGF0dGVybiA9ICJeRVJDQy0iLCB4ID0gcm93bmFtZXMoeCA9IHJhdy5kYXRhKSwgdmFsdWUgPSBGQUxTRSkKcmF3LmRhdGEgPC0gcmF3LmRhdGFbLWVyY2MuaW5kZXgsXQoKIyBDcmVhdGUgdGhlIFNldXJhdCBvYmplY3Qgd2l0aCBhbGwgdGhlIGRhdGEKdGlzcyA8LSBDcmVhdGVTZXVyYXRPYmplY3QocmF3LmRhdGEgPSByYXcuZGF0YSwgcHJvamVjdCA9IHRpc3N1ZV9vZl9pbnRlcmVzdCwgCiAgICAgICAgICAgICAgICAgICAgbWluLmNlbGxzID0gNSwgbWluLmdlbmVzID0gNSkKCnRpc3MgPC0gQWRkTWV0YURhdGEob2JqZWN0ID0gdGlzcywgbWV0YS5kYXRhKQp0aXNzIDwtIEFkZE1ldGFEYXRhKG9iamVjdCA9IHRpc3MsIHBlcmNlbnQuZXJjYywgY29sLm5hbWUgPSAicGVyY2VudC5lcmNjIikKIyBDaGFuZ2UgZGVmYXVsdCBuYW1lIGZvciBzdW1zIG9mIGNvdW50cyBmcm9tIG5VTUkgdG8gblJlYWRzCmNvbG5hbWVzKHRpc3NAbWV0YS5kYXRhKVtjb2xuYW1lcyh0aXNzQG1ldGEuZGF0YSkgPT0gJ25VTUknXSA8LSAnblJlYWRzJwoKIyBDcmVhdGUgbWV0YWRhdGEgY29sdW1ucyBmb3IgYW5ub3RhdGlvbnMgYW5kIHN1YmFubm90YXRpb25zCnRpc3NAbWV0YS5kYXRhWywnYW5ub3RhdGlvbiddIDwtIE5BCnRpc3NAbWV0YS5kYXRhWywnc3ViYW5ub3RhdGlvbiddIDwtIE5BCmBgYAoKCkNhbGN1bGF0ZSBwZXJjZW50IHJpYm9zb21hbCBnZW5lcy4KCmBgYHtyfQpyaWJvLmdlbmVzIDwtIGdyZXAocGF0dGVybiA9ICJeUnBbc2xdW1s6ZGlnaXQ6XV0iLCB4ID0gcm93bmFtZXMoeCA9IHRpc3NAZGF0YSksIHZhbHVlID0gVFJVRSkKcGVyY2VudC5yaWJvIDwtIE1hdHJpeDo6Y29sU3Vtcyh0aXNzQHJhdy5kYXRhW3JpYm8uZ2VuZXMsIF0pL01hdHJpeDo6Y29sU3Vtcyh0aXNzQHJhdy5kYXRhKQp0aXNzIDwtIEFkZE1ldGFEYXRhKG9iamVjdCA9IHRpc3MsIG1ldGFkYXRhID0gcGVyY2VudC5yaWJvLCBjb2wubmFtZSA9ICJwZXJjZW50LnJpYm8iKQpgYGAKCkEgc2FuaXR5IGNoZWNrOiBnZW5lcyBwZXIgY2VsbCB2cyByZWFkcyBwZXIgY2VsbC4KCmBgYHtyfQpHZW5lUGxvdChvYmplY3QgPSB0aXNzLCBnZW5lMSA9ICJuUmVhZHMiLCBnZW5lMiA9ICJuR2VuZSIsIHVzZS5yYXc9VCkKYGBgCgpGaWx0ZXIgb3V0IGNlbGxzIHdpdGggZmV3IHJlYWRzIGFuZCBmZXcgZ2VuZXMuCgpgYGB7cn0KdGlzcyA8LSBGaWx0ZXJDZWxscyhvYmplY3QgPSB0aXNzLCBzdWJzZXQubmFtZXMgPSBjKCJuR2VuZSIsICJuUmVhZHMiKSwgCiAgICBsb3cudGhyZXNob2xkcyA9IGMoNTAwLCA1MDAwMCksIGhpZ2gudGhyZXNob2xkcyA9IGMoMjUwMDAsIDIwMDAwMDApKQpgYGAKCgpOb3JtYWxpemUgdGhlIGRhdGEsIHRoZW4gcmVncmVzcyBvdXQgY29ycmVsYXRpb24gd2l0aCB0b3RhbCByZWFkcwpgYGB7cn0KdGlzcyA8LSBOb3JtYWxpemVEYXRhKG9iamVjdCA9IHRpc3MpCnRpc3MgPC0gU2NhbGVEYXRhKG9iamVjdCA9IHRpc3MsIHZhcnMudG8ucmVncmVzcyA9IGMoIm5SZWFkcyIsICJwZXJjZW50LnJpYm8iLCJSbjQ1cyIpKQp0aXNzIDwtIEZpbmRWYXJpYWJsZUdlbmVzKG9iamVjdCA9IHRpc3MsIGRvLnBsb3QgPSBUUlVFLCB4LmhpZ2guY3V0b2ZmID0gSW5mLCB5LmN1dG9mZiA9IDAuNSkKYGBgCgoKUnVuIFByaW5jaXBhbCBDb21wb25lbnQgQW5hbHlzaXMuCmBgYHtyfQp0aXNzIDwtIFJ1blBDQShvYmplY3QgPSB0aXNzLCBkby5wcmludCA9IEZBTFNFKQp0aXNzIDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gdGlzcywgZG8ucHJpbnQgPSBGQUxTRSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KUENIZWF0bWFwKG9iamVjdCA9IHRpc3MsIHBjLnVzZSA9IDE6MywgY2VsbHMudXNlID0gNTAwLCBkby5iYWxhbmNlZCA9IFRSVUUsIGxhYmVsLmNvbHVtbnMgPSBGQUxTRSwgbnVtLmdlbmVzID0gOCkKYGBgCgpMYXRlciBvbiAoaW4gRmluZENsdXN0ZXJzIGFuZCBUU05FKSB5b3Ugd2lsbCBwaWNrIGEgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBrZWVwaW5nIHRoZSBtYWpvciBkaXJlY3Rpb25zIG9mIHZhcmlhdGlvbiBpbiB0aGUgZGF0YSBhbmQsIGlkZWFsbHksIHN1cHJlc3Npbmcgbm9pc2UuIFRoZXJlIGlzIG5vIGNvcnJlY3QgYW5zd2VyIHRvIHRoZSBudW1iZXIgdG8gdXNlLCBidXQgYSBkZWNlbnQgcnVsZSBvZiB0aHVtYiBpcyB0byBnbyB1bnRpbCB0aGUgcGxvdCBwbGF0ZWF1cy4KCmBgYHtyfQpQQ0VsYm93UGxvdChvYmplY3QgPSB0aXNzKQpgYGAKCkNob29zZSB0aGUgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4KYGBge3J9CiMgU2V0IG51bWJlciBvZiBwcmluY2lwYWwgY29tcG9uZW50cy4gCm4ucGNzID0gMTUKYGBgCgoKVGhlIGNsdXN0ZXJpbmcgaXMgcGVyZm9ybWVkIGJhc2VkIG9uIGEgbmVhcmVzdCBuZWlnaGJvcnMgZ3JhcGguIENlbGxzIHRoYXQgaGF2ZSBzaW1pbGFyIGV4cHJlc3Npb24gd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIuIFRoZSBMb3V2YWluIGFsZ29yaXRobSBsb29rcyBmb3IgZ3JvdXBzIG9mIGNlbGxzIHdpdGggaGlnaCBtb2R1bGFyaXR5LS1tb3JlIGNvbm5lY3Rpb25zIHdpdGhpbiB0aGUgZ3JvdXAgdGhhbiBiZXR3ZWVuIGdyb3Vwcy4gVGhlIHJlc29sdXRpb24gcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNjYWxlLi4uaGlnaGVyIHJlc29sdXRpb24gd2lsbCBnaXZlIG1vcmUgY2x1c3RlcnMsIGxvd2VyIHJlc29sdXRpb24gd2lsbCBnaXZlIGZld2VyLgoKRm9yIHRoZSB0b3AtbGV2ZWwgY2x1c3RlcmluZywgYWltIHRvIHVuZGVyLWNsdXN0ZXIgaW5zdGVhZCBvZiBvdmVyLWNsdXN0ZXIuIEl0IHdpbGwgYmUgZWFzeSB0byBzdWJzZXQgZ3JvdXBzIGFuZCBmdXJ0aGVyIGFuYWx5emUgdGhlbSBiZWxvdy4KCmBgYHtyfQojIFNldCByZXNvbHV0aW9uIApyZXMudXNlZCA8LSAwLjUKCnRpc3MgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IHRpc3MsIHJlZHVjdGlvbi50eXBlID0gInBjYSIsIGRpbXMudXNlID0gMTpuLnBjcywgCiAgICByZXNvbHV0aW9uID0gcmVzLnVzZWQsIHByaW50Lm91dHB1dCA9IDAsIHNhdmUuU05OID0gVFJVRSkKYGBgCgpUbyB2aXN1YWxpemUgCmBgYHtyfQojIElmIGNlbGxzIGFyZSB0b28gc3ByZWFkIG91dCwgeW91IGNhbiByYWlzZSB0aGUgcGVycGxleGl0eS4gSWYgeW91IGhhdmUgZmV3IGNlbGxzLCB0cnkgYSBsb3dlciBwZXJwbGV4aXR5IChidXQgbmV2ZXIgbGVzcyB0aGFuIDEwKS4KdGlzcyA8LSBSdW5UU05FKG9iamVjdCA9IHRpc3MsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT04NCkKYGBgCgpgYGB7cn0KIyBub3RlIHRoYXQgeW91IGNhbiBzZXQgZG8ubGFiZWw9VCB0byBoZWxwIGxhYmVsIGluZGl2aWR1YWwgY2x1c3RlcnMKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ubGFiZWwgPSBUKQpgYGAKCkNoZWNrIGV4cHJlc3Npb24gb2YgZ2VuZXMgb2YgaW50ZXJzZXQuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD04NCwgZmlnLndpZHRoPTE1fQpnZW5lc190b19jaGVjayA9IGMoJ0l0Z2FtJywgJ0lsN3InLCAnS2l0JywgJ0F0eG4xJywgJ0ZjZ3IzJywgJ0ZsdDMnLCAnQ2QzNCcsICdTbGFtZjEnLCAnR3ByNTYnLCAnU3RtbjEnLCAnVG1lbTE3NmInLCAgJ0l0Z2FsJywgJ0l0Z2F4JywgJ0VtcjEnLCAnQ2Q2OCcsICdGY2dyNCcsICdNcGVnMScsICdJdGdiMicsICdBaG5haycsICdQbGQ0JywgJ0NkM2UnLCAnQ2Q0JywgJ0NkOGEnLCAnTHk2ZCcsICdDZDI3JywgJ0NyMicsICdGY2VyMmEnLCAnQ2QyJywgJ0NkNycsICdNbWUnLCAnVGh5MScsICdDZDE5JywgJ01zNGExJywgJ0NkNzQnLCAnQ2hjaGQxMCcsICdDbnAnLCAnQ2Q3OWEnLCAnQ2Q3OWInLCAnVnByZWIzJywgJ0tscmIxYScsICdTMTAwYTExJywgJ0x0ZicsICdOZ3AnLCAnRmNlcjFnJywgJ1BnbHlycDEnLCAnTGNuMicsICdDYW1wJywgJ0hwJywgJ0x5Nmc2YycsICdMeTZnNmUnLCAnUHRwcmMnKQojZ2VuZXNfdG9fY2hlY2sgPSBjKCdBbGInLCAnQ3lwMmYyJywgJ0N5cDJlMScsICdIYW1wJykKCkZlYXR1cmVQbG90KHRpc3MsIGdlbmVzX3RvX2NoZWNrLCBwdC5zaXplID0gMSwgbkNvbCA9IDMpCmBgYAoKRG90cGxvdHMgbGV0IHlvdSBzZWUgdGhlIGludGVuc2l0eSBvZiBleHBwcmVzc2lvbiBhbmQgdGhlIGZyYWN0aW9uIG9mIGNlbGxzIGV4cHJlc3NpbmcgZm9yIGVhY2ggb2YgeW91ciBnZW5lcyBvZiBpbnRlcmVzdC4KCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD0zOX0KIyBUbyBjaGFuZ2UgdGhlIHktYXhpcyB0byBzaG93IHJhdyBjb3VudHMsIGFkZCB1c2UucmF3ID0gVC4KRG90UGxvdCh0aXNzLCBnZW5lc190b19jaGVjaywgcGxvdC5sZWdlbmQgPSBUKQpgYGAKCkhvdyBiaWcgYXJlIHRoZSBjbHVzdGVycz8KYGBge3J9CnRhYmxlKHRpc3NAaWRlbnQpCmBgYAoKV2hpY2ggbWFya2VycyBpZGVudGlmeSBhIHNwZWNpZmljIGNsdXN0ZXI/CgpgYGB7cn0KY2x1c3QubWFya2VycyA8LSBGaW5kTWFya2VycyhvYmplY3QgPSB0aXNzLCBpZGVudC4xID0gMCwgb25seS5wb3MgPSBUUlVFLCBtaW4ucGN0ID0gMC4yNSwgdGhyZXNoLnVzZSA9IDAuMjUpCmBgYAoKYGBge3J9CnByaW50KHggPSBoZWFkKHg9IGNsdXN0Lm1hcmtlcnMsIG4gPSAxMCkpCmBgYAoKWW91IGNhbiBhbHNvIGNvbXB1dGUgYWxsIG1hcmtlcnMgZm9yIGFsbCBjbHVzdGVycyBhdCBvbmNlLiBUaGlzIG1heSB0YWtlIHNvbWUgdGltZS4KYGBge3J9CnRpc3MubWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhvYmplY3QgPSB0aXNzLCBvbmx5LnBvcyA9IFRSVUUsIG1pbi5wY3QgPSAwLjI1LCB0aHJlc2gudXNlID0gMC4yNSkKYGBgCmBgYHtyfQpoZWFkKHRpc3MubWFya2VycykKYGBgCgpEaXNwbGF5IHRoZSB0b3AgbWFya2VycyB5b3UgY29tcHV0ZWQgYWJvdmUuCmBgYHtyfQp0aXNzLm1hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSB0b3Bfbig1LCBhdmdfZGlmZikKYGBgCgojIyBBc3NpZ25pbmcgY2VsbCB0eXBlIGlkZW50aXR5IHRvIGNsdXN0ZXJzCgpBdCBhIGNvYXJzZSBsZXZlbCwgd2UgY2FuIHVzZSBjYW5vbmljYWwgbWFya2VycyB0byBtYXRjaCB0aGUgdW5iaWFzZWQgY2x1c3RlcmluZyB0byBrbm93biBjZWxsIHR5cGVzOgoKMDogYWxwaGEKMTogYmV0YQoyOiBiZXRhCjM6IGV4b2NyaW5lCjQ6IGR1Y3QKNTogZGVsdGEKNjogZ2FtbWEKNzogZW5kb3RoZWxpYWwKODogaW1tdW5lCjk6IHN0ZWxsYXRlCgpgYGB7cn0KIyBzdGFzaCBjdXJyZW50IGNsdXN0ZXIgSURzCnRpc3MgPC0gU3Rhc2hJZGVudChvYmplY3QgPSB0aXNzLCBzYXZlLm5hbWUgPSAiY2x1c3Rlci5pZHMiKQoKIyBlbnVtZXJhdGUgY3VycmVudCBjbHVzdGVyIElEcyBhbmQgdGhlIGxhYmVscyBmb3IgdGhlbQpjbHVzdGVyLmlkcyA8LSBjKDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQphbm5vdGF0aW9uIDwtIGMoImhlbWF0b3BvaWV0aWMgc3RlbSBjZWxsIiwgIkIgY2VsbCIsICJCIGNlbGwiLCAibmV1dHJvcGhpbCIsICJncmFudWxvY3l0ZSIsICJtb25vY3l0ZSIsICJCIGNlbGwiLCAiVF9OSyIsICJuZXV0cm9waGlsIiwgIkZyYWN0aW9uIEEgcHJlLXBybyBCIGNlbGwiLCAiaGVtYXRvcG9pZXRpYyBzdGVtIGNlbGwiKQpjZWxsX29udG9sb2d5X2lkIDwtIGMoIkNMOjAwMDAwMzciLCAiQ0w6MDAwMDIzNiIsICJDTDowMDAwMjM2IiwgIkNMOjAwMDA3NzUiLCAiQ0w6MDAwMDA5NCIsICJDTDowMDAwNTc2IiwgIkNMOjAwMDAyMzYiLCBOQSwgIkNMOjAwMDA3NzUiLCAiQ0w6MDAwMjA0NSIsICJDTDowMDAwMDM3IikKICAKCnRpc3NAbWV0YS5kYXRhWywnYW5ub3RhdGlvbiddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BpZGVudCwgZnJvbSA9IGNsdXN0ZXIuaWRzLCB0byA9IGFubm90YXRpb24pCnRpc3NAbWV0YS5kYXRhWywnY2VsbF9vbnRvbG9neV9pZCddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BpZGVudCwgZnJvbSA9IGNsdXN0ZXIuaWRzLCB0byA9IGNlbGxfb250b2xvZ3lfaWQpCgp0aXNzQG1ldGEuZGF0YVt0aXNzQGNlbGwubmFtZXMsJ2Fubm90YXRpb24nXSA8LSBhcy5jaGFyYWN0ZXIodGlzc0BtZXRhLmRhdGEkYW5ub3RhdGlvbikKdGlzc0BtZXRhLmRhdGFbdGlzc0BjZWxsLm5hbWVzLCdjZWxsX29udG9sb2d5X2lkJ10gPC0gYXMuY2hhcmFjdGVyKHRpc3NAbWV0YS5kYXRhJGNlbGxfb250b2xvZ3lfaWQpCgoKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ubGFiZWwgPSBUUlVFLCBwdC5zaXplID0gMC41LCBncm91cC5ieT0nYW5ub3RhdGlvbicpCmBgYAoKCiMjIENoZWNraW5nIGZvciBiYXRjaCBlZmZlY3RzCgoKQ29sb3IgYnkgbWV0YWRhdGEsIGxpa2UgcGxhdGUgYmFyY29kZSwgdG8gY2hlY2sgZm9yIGJhdGNoIGVmZmVjdHMuCmBgYHtyfQpUU05FUGxvdChvYmplY3QgPSB0aXNzLCBkby5yZXR1cm4gPSBUUlVFLCBncm91cC5ieSA9ICJwbGF0ZS5iYXJjb2RlIikKYGBgCgpQcmludCBhIHRhYmxlIHNob3dpbmcgdGhlIGNvdW50IG9mIGNlbGxzIGluIGVhY2ggaWRlbnRpdHkgY2F0ZWdvcnkgZnJvbSBlYWNoIHBsYXRlLgoKYGBge3J9CnRhYmxlKGFzLmNoYXJhY3Rlcih0aXNzQGlkZW50KSwgYXMuY2hhcmFjdGVyKHRpc3NAbWV0YS5kYXRhJHBsYXRlLmJhcmNvZGUpKQpgYGAKCgojIFN1YnNldCBhbmQgaXRlcmF0ZQoKV2UgY2FuIHJlcGVhdCB0aGUgYWJvdmUgYW5hbHlzaXMgb24gYSBzdWJzZXQgb2YgY2VsbHMsIGRlZmluZWQgdXNpbmcgY2x1c3RlciBJRHMgb3Igc29tZSBvdGhlciBtZXRhZGF0YS4gVGhpcyBpcyBhIGdvb2Qgd2F5IHRvIGRyaWxsIGRvd24gYW5kIGZpbmQgc3Vic3RydWN0dXJlLgoKCiMjIFN1YnNldCA9PSBUIGFuZCBOSyBjZWxscyAoQ2x1c3RlciA3KQoKYGBge3J9CiMgU3Vic2V0IGRhdGEgYmFzZWQgb24gY2x1c3RlciBpZApzdWJ0aXNzNyA8LSBTdWJzZXREYXRhKG9iamVjdCA9IHRpc3MsIGlkZW50LnVzZSA9IGMoNyksIGRvLmNlbnRlciA9IEYsIGRvLnNjYWxlID0gRiwgY2VsbHMudXNlID0gKQoKIyBUbyBzdWJzZXQgZGF0YSBiYXNlZCBvbiBhbm5vdGF0aW9uIG9yIG90aGVyIG1ldGFkYXRhLCB5b3UgY2FuIGV4cGxpY2l0bHkgcGFzcyBjZWxsIG5hbWVzCgojIGFubm8gPSAnZXhvY3JpbmUgY2VsbHMnCiMgY2VsbHMudG8udXNlID0gdGlzc0BjZWxsLm5hbWVzW3doaWNoKHRpc3NAbWV0YS5kYXRhJGFubm90YXRpb24gPT0gYW5ubyldCiMgc3VidGlzczcgPC0gU3Vic2V0RGF0YShvYmplY3QgPSB0aXNzLCBjZWxscy51c2UgPSBjZWxscy50by51c2UsIGRvLmNlbnRlciA9IEYsIGRvLnNjYWxlID0gRikKCmBgYAoKYGBge3J9CnN1YnRpc3M3IDwtIE5vcm1hbGl6ZURhdGEob2JqZWN0ID0gc3VidGlzczcpCnN1YnRpc3M3IDwtIFNjYWxlRGF0YShvYmplY3QgPSBzdWJ0aXNzNywgdmFycy50by5yZWdyZXNzID0gYygiblJlYWRzIiwgInBlcmNlbnQucmlibyIsIlJuNDVzIikpCmBgYAoKYGBge3J9CnN1YnRpc3M3IDwtIEZpbmRWYXJpYWJsZUdlbmVzKG9iamVjdCA9IHN1YnRpc3M3LCBkby5wbG90ID0gVFJVRSwgeC5oaWdoLmN1dG9mZiA9IEluZiwgeS5jdXRvZmYgPSAwLjgpCnN1YnRpc3M3IDwtIFJ1blBDQShvYmplY3QgPSBzdWJ0aXNzNywgcGNzLmNvbXB1dGUgPSAyMCkKc3VidGlzczcgPC0gUHJvamVjdFBDQShvYmplY3QgPSBzdWJ0aXNzNywgZG8ucHJpbnQgPSBGQUxTRSkKYGBgCgoKUnVuIFByaW5jaXBhbCBDb21wb25lbnQgQW5hbHlzaXMuCmBgYHtyfQpzdWJ0aXNzNyA8LSBSdW5QQ0Eob2JqZWN0ID0gc3VidGlzczcsIGRvLnByaW50ID0gRkFMU0UpCnN1YnRpc3M3IDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gc3VidGlzczcsIGRvLnByaW50ID0gRkFMU0UpCmBgYAoKYGBge3J9CiMgSWYgdGhpcyBmYWlscyBmb3IgeW91ciBzdWJzZXQsIGl0IG1heSBiZSB0aGF0IGNlbGxzLnVzZSBpcyBtb3JlIGNlbGxzIHRoYW4geW91IGhhdmUgbGVmdCEgVHJ5IHJlZHVjaW5nIGl0LgpQQ0hlYXRtYXAob2JqZWN0ID0gc3VidGlzczcsIHBjLnVzZSA9IDE6MywgY2VsbHMudXNlID0gMjUwLCBkby5iYWxhbmNlZCA9IFRSVUUsIGxhYmVsLmNvbHVtbnMgPSBGQUxTRSwgbnVtLmdlbmVzID0gMTIpCmBgYAoKTGF0ZXIgb24gKGluIEZpbmRDbHVzdGVycyBhbmQgVFNORSkgeW91IHdpbGwgcGljayBhIG51bWJlciBvZiBwcmluY2lwYWwgY29tcG9uZW50cyB0byB1c2UuIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Yga2VlcGluZyB0aGUgbWFqb3IgZGlyZWN0aW9ucyBvZiB2YXJpYXRpb24gaW4gdGhlIGRhdGEgYW5kLCBpZGVhbGx5LCBzdXByZXNzaW5nIG5vaXNlLiBUaGVyZSBpcyBubyBjb3JyZWN0IGFuc3dlciB0byB0aGUgbnVtYmVyIHRvIHVzZSwgYnV0IGEgZGVjZW50IHJ1bGUgb2YgdGh1bWIgaXMgdG8gZ28gdW50aWwgdGhlIHBsb3QgcGxhdGVhdXMuCgpgYGB7cn0KUENFbGJvd1Bsb3Qob2JqZWN0ID0gc3VidGlzczcpCmBgYAoKQ2hvb3NlIHRoZSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLgpgYGB7cn0KIyBTZXQgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzLiAKc3ViNy5uLnBjcyA9IDUKYGBgCgoKVGhlIGNsdXN0ZXJpbmcgaXMgcGVyZm9ybWVkIGJhc2VkIG9uIGEgbmVhcmVzdCBuZWlnaGJvcnMgZ3JhcGguIENlbGxzIHRoYXQgaGF2ZSBzaW1pbGFyIGV4cHJlc3Npb24gd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIuIFRoZSBMb3V2YWluIGFsZ29yaXRobSBsb29rcyBmb3IgZ3JvdXBzIG9mIGNlbGxzIHdpdGggaGlnaCBtb2R1bGFyaXR5LS1tb3JlIGNvbm5lY3Rpb25zIHdpdGhpbiB0aGUgZ3JvdXAgdGhhbiBiZXR3ZWVuIGdyb3Vwcy4gVGhlIHJlc29sdXRpb24gcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNjYWxlLi4uaGlnaGVyIHJlc29sdXRpb24gd2lsbCBnaXZlIG1vcmUgY2x1c3RlcnMsIGxvd2VyIHJlc29sdXRpb24gd2lsbCBnaXZlIGZld2VyLgoKYGBge3J9CiMgU2V0IHJlc29sdXRpb24gCnN1Yi5yZXMudXNlZCA8LSAxCgpzdWJ0aXNzNyA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0ID0gc3VidGlzczcsIHJlZHVjdGlvbi50eXBlID0gInBjYSIsIGRpbXMudXNlID0gMTpzdWI3Lm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSBzdWIucmVzLnVzZWQsIHByaW50Lm91dHB1dCA9IDAsIHNhdmUuU05OID0gVFJVRSkKYGBgCgpUbyB2aXN1YWxpemUgCmBgYHtyfQojIElmIGNlbGxzIGFyZSB0b28gc3ByZWFkIG91dCwgeW91IGNhbiByYWlzZSB0aGUgcGVycGxleGl0eS4gSWYgeW91IGhhdmUgZmV3IGNlbGxzLCB0cnkgYSBsb3dlciBwZXJwbGV4aXR5IChidXQgbmV2ZXIgbGVzcyB0aGFuIDEwKS4Kc3VidGlzczcgPC0gUnVuVFNORShvYmplY3QgPSBzdWJ0aXNzNywgZGltcy51c2UgPSAxOnN1Yjcubi5wY3MsIHNlZWQudXNlID0gMTAsIHBlcnBsZXhpdHk9MzApCmBgYAoKYGBge3J9CiMgbm90ZSB0aGF0IHlvdSBjYW4gc2V0IGRvLmxhYmVsPVQgdG8gaGVscCBsYWJlbCBpbmRpdmlkdWFsIGNsdXN0ZXJzClRTTkVQbG90KG9iamVjdCA9IHN1YnRpc3M3LCBkby5sYWJlbCA9IFQpCmBgYAoKYGBge3J9CnN1YnRpc3M3Lm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMob2JqZWN0ID0gc3VidGlzczcsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQpgYGAKCmBgYHtyfQpzdWJ0aXNzNy5tYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24oNiwgYXZnX2RpZmYpCmBgYAoKQ2hlY2sgZXhwcmVzc2lvbiBvZiBnZW5lcyBvZiBpbnRlcnNldC4KYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NDgsIGZpZy53aWR0aD0xNX0KZ2VuZXNfdG9fY2hlY2sgPSBjKCdDZDYnLCdJbDdyJywnQ3RsYTQnLCdDZDhiMScsICdDeGNyNicsICdDZDhhJywgJ1R5cm9icCcsICdOY3IxJywgJ0NkM2UnLCAnS2xyYjFhJywgJ0tscmIxYycsICdHem1hJywgJ1ByZjEnLCAnU2VycGluYjknLCAnTHl6MicsICdOZ3AnLCAnSHAnLCAnTHk2YzInLCAnQ2Q3OWEnLCAnQ2Q3NCcsICdIMi1BYScsICdIMi1BYjEnLCAnQ2Q3OWInLCAnSDItRWIxJywgJ0NjbmEyJywgJ1N0bW4xJywgJ1RvcDJhJywgJ01raTY3JywgJ1JybTInLCAnTmtnNycpCgpGZWF0dXJlUGxvdChzdWJ0aXNzNywgZ2VuZXNfdG9fY2hlY2ssIHB0LnNpemUgPSAxLCBuQ29sID0gMykKYGBgCgpEb3RwbG90cyBsZXQgeW91IHNlZSB0aGUgaW50ZW5zaXR5IG9mIGV4cHByZXNzaW9uIGFuZCB0aGUgZnJhY3Rpb24gb2YgY2VsbHMgZXhwcmVzc2luZyBmb3IgZWFjaCBvZiB5b3VyIGdlbmVzIG9mIGludGVyZXN0LgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTMwfQojIFRvIGNoYW5nZSB0aGUgeS1heGlzIHRvIHNob3cgcmF3IGNvdW50cywgYWRkIHVzZS5yYXcgPSBULgpEb3RQbG90KHN1YnRpc3M3LCBnZW5lc190b19jaGVjaywgcGxvdC5sZWdlbmQgPSBUKQpgYGAKCkhvdyBiaWcgYXJlIHRoZSBjbHVzdGVycz8KYGBge3J9CnRhYmxlKHN1YnRpc3M3QGlkZW50KQpgYGAKCiMjIENoZWNraW5nIGZvciBiYXRjaCBlZmZlY3RzCgpDb2xvciBieSBtZXRhZGF0YSwgbGlrZSBwbGF0ZSBiYXJjb2RlLCB0byBjaGVjayBmb3IgYmF0Y2ggZWZmZWN0cy4KYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IHN1YnRpc3M3LCBkby5yZXR1cm4gPSBUUlVFLCBncm91cC5ieSA9ICJwbGF0ZS5iYXJjb2RlIikKYGBgCgpQcmludCBhIHRhYmxlIHNob3dpbmcgdGhlIGNvdW50IG9mIGNlbGxzIGluIGVhY2ggaWRlbnRpdHkgY2F0ZWdvcnkgZnJvbSBlYWNoIHBsYXRlLgoKYGBge3J9CnRhYmxlKGFzLmNoYXJhY3RlcihzdWJ0aXNzN0BpZGVudCksIGFzLmNoYXJhY3RlcihzdWJ0aXNzN0BtZXRhLmRhdGEkcGxhdGUuYmFyY29kZSkpCmBgYAoKCgojIyMgQXNzaWduaW5nIHN1YmFubm90YXRpb25zCgpGb3IgdGhlIHN1YnNldHMsIHdlIHByb2R1Y2Ugc3ViYW5ub3RhdGlvbnMuIFRoZXNlIHdpbGwgYmUgd3JpdHRlbiBiYWNrIGFzIG1ldGFkYXRhIGluIHRoZSBvcmlnaW5hbCBvYmplY3QsIHNvIHdlIGNhbiBzZWUgYWxsIHN1YmFubm90YXRpb25zIHRvZ2V0aGVyLgoKSWYgc29tZSBvZiB0aGUgY2x1c3RlcnMgeW91IGZpbmQgaW4gdGhlIHN1YnNldCBkZXNlcnZlIGFkZGl0aW9uYWwgYW5ub3RhdGlvbiwgeW91IGNhbiBhZGQgdGhhdCByaWdodCBoZXJlLiBVc2UgTkEgZm9yIGNsdXN0ZXJzIGZvciB3aGljaCBubyBzdWJhbm5vdGF0aW9uIGlzIG5lZWRlZC4KCmBgYHtyfQpzdWJjbHVzdGVyLmlkcyA8LSBjKDAsIDEsIDIsIDMsIDQsIDUpCnN1YmFubm90YXRpb24gPC0gYygiVCBjZWxsIiwibmF0dXJhbCBraWxsZXIgY2VsbCIsICJuYXR1cmFsIGtpbGxlciBjZWxsIiwgIlQgY2VsbCIsICJUIGNlbGwiLCAiVCBjZWxsIikKY2VsbF9vbnRvbG9neV9pZCA9IGMoIkNMOjAwMDAwODQiLCAiQ0w6MDAwMDYyMyIsICJDTDowMDAwNjIzIiwgIkNMOjAwMDAwODQiLCAiQ0w6MDAwMDA4NCIsICJDTDowMDAwMDg0IikKCnN1YnRpc3M3QG1ldGEuZGF0YVssJ2Fubm90YXRpb24nXSA8LSBwbHlyOjptYXB2YWx1ZXMoeCA9IHN1YnRpc3M3QGlkZW50LCBmcm9tID0gc3ViY2x1c3Rlci5pZHMsIHRvID0gYW5ub3RhdGlvbikKc3VidGlzczdAbWV0YS5kYXRhWywnY2VsbF9vbnRvbG9neV9pZCddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gc3VidGlzczdAaWRlbnQsIGZyb20gPSBzdWJjbHVzdGVyLmlkcywgdG8gPSBjZWxsX29udG9sb2d5X2lkKQoKdGlzc0BtZXRhLmRhdGFbc3VidGlzczdAY2VsbC5uYW1lcywnYW5ub3RhdGlvbiddIDwtIGFzLmNoYXJhY3RlcihzdWJ0aXNzN0BtZXRhLmRhdGEkYW5ub3RhdGlvbikKdGlzc0BtZXRhLmRhdGFbc3VidGlzczdAY2VsbC5uYW1lcywnY2VsbF9vbnRvbG9neV9pZCddIDwtIGFzLmNoYXJhY3RlcihzdWJ0aXNzN0BtZXRhLmRhdGEkY2VsbF9vbnRvbG9neV9pZCkKClRTTkVQbG90KG9iamVjdCA9IHN1YnRpc3M3LCBkby5sYWJlbCA9IFRSVUUsIHB0LnNpemUgPSAwLjUsIGdyb3VwLmJ5PSdhbm5vdGF0aW9uJykKYGBgCgpXaGVuIHlvdSBzYXZlIHRoZSBzdWJ0aXNzdWUsIHBsZWFzZSBnaXZlIGl0IGEgbmFtZS4KCmBgYHtyfQpzdWJ0aXNzNy5uYW1lID0gJ05rX1RfY2VsbHMnCnNhdmUoc3VidGlzczcsIGZpbGU9cGFzdGUwKHNhdmVfZGlyLCIvIixzdWJ0aXNzNy5uYW1lLCAiX3NldXJhdF9zdWJ0aXNzNy5Sb2JqIikpCmBgYAoKCiMgRXhwb3J0IHRoZSBmaW5hbCBtZXRhZGF0YQoKU28gdGhhdCBCaW9odWIgY2FuIGVhc2lseSBjb21iaW5lIGFsbCB5b3VyIGFubm90YXRpb25zLCBwbGVhc2UgZXhwb3J0IHRoZW0gYXMgYSBzaW1wbGUgY3N2LgoKYGBge3J9CndyaXRlLmNzdih0aXNzQG1ldGEuZGF0YVssYygncGxhdGUuYmFyY29kZScsJ2Fubm90YXRpb24nLCdzdWJhbm5vdGF0aW9uJyldLGZpbGUgPXBhc3RlMChzYXZlX2RpciwiLyIsIHRpc3N1ZV9vZl9pbnRlcmVzdCwiX2Fubm90YXRpb24uY3N2IikpCmBgYAoKCgo=